Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2007-05-22
帖子: 1
声望力: 0 ![]() |
![]()
我原本是想通过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; // 线段与椭圆无交点,完全位于椭圆外部 |
![]() |
![]() |