Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2007-05-24, 11:42   #1
沧海一笑
初级会员
 
注册日期: 2007-05-22
帖子: 1
声望力: 0
沧海一笑 正向着好的方向发展
默认 【求助】如何把这个程序补充完整并用matlab也能实现啊

我原本是想通过matlab实现二维图形的裁剪,但是matlab中没有直接的椭圆窗口裁剪函数,我在网上搜到其c语言伪代码但是我不会用c语言写全 请会的朋友帮忙把下面的程序写完整 如果能够告诉我如何实现matlab和C的混合编程更好 谢谢



设椭圆的中心点即为坐标轴的中点O,被裁剪线段的两端点分别为A(xa,ya)B(xb,yb)(xa≤xb)。算法的具体裁剪过程用伪代码表述如下:其中,(x1,y1)、(x2,y2):分别为裁剪后所得线段的两个端点;Da 、Db:分别为线段两端点到椭圆焦点的距离之和;P(xp,yp):中心点O 到AB垂足;Lr:平行于AB且与椭圆相切的CD 线段到中心点的距离。





if (xa = =xb )
{
if (xa>a)
break; //被裁剪线段完全位于椭圆窗口外
else
x1=x2=xa;
}
else if (ya= =yb)
{
if (ya>b)
break; //被裁剪线段完全位于椭圆窗口外
else
y1=y2=ya;
}
else if (min{xa, xb}≥a 或max{xa, xb}≤-a
或min{ya, yb}≥ b 或max{ya, yb}≤-b)
break; //被裁剪线段完全位于椭圆窗口外
else if(Da<2a&&Db<2a)
{
x1=xa;
y1=ya;
x2=xb; //线段完全位于椭圆窗口内
y2=yb;
break;
}
else if( Da<2a&&Db>2a 或 Da>2a&&Db<2a)
求(x1,y1)、(x2,y2);
else
{
if(xa<xb<xp 或者xp<xa<xb)
break; //线段完全位于椭圆窗口外部
else if(xa<xp<xb)
{
if(Lp<2a ) //点P 位于椭圆窗口内部
求(x1,y1)、 (x2,y2);
break;
else
{
if(Lp>Lr)
break; //被裁剪线段完全位于椭圆外部
else
求(x1,y1)、(x2,y2);
}
}
else
break; // 线段与椭圆无交点,完全位于椭圆外部
沧海一笑 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 06:12


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.