登录论坛

查看完整版本 : 【求助】如何把这个程序补充完整并用matlab也能实现啊


沧海一笑
2007-05-24, 11:42
我原本是想通过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; // 线段与椭圆无交点,完全位于椭圆外部