怎么判断两线的交点?(50分)

  • 主题发起人 主题发起人 appleyao
  • 开始时间 开始时间
A

appleyao

Unregistered / Unconfirmed
GUEST, unregistred user!
先随意画两条线,再画个矩形,
我要把矩形外的线段裁剪掉
怎么做比较方便?
 
在画矩形时使用跟画线条不同的颜色,然后使用
Canvas.FloodFill(X, Y, Color, fsBorder)。 其中,
X, Y 在矩形外,Color 画矩形时使用的颜色。
如矩形的颜色要和线条一样,可再使用画线条的颜色将矩形重画一遍。
 
我说的不是很清楚,
由于是图形学的作业所以
用floodfill可能不是很好。
我是想把直线在多边形边上
隔断,然后去掉多边形外的
线段。不知有没有好的算法?
 
如果:
aX + bY = c 代表直线,
同时:
1) a1X + bbY < c1
2) a2X + b2Y > c2
3) a3X + b3Y < c3
.....
n) anX + bnY > cn
代表多边形,当然这个多边形必须封闭,是否封闭的验证自己想办法吧。

下面是算法:
对于所有的满足 aX + bY =c 的点 (x,y),如果同时满足1), 2), 3) ... n)则说明
~~~~
在多边形内,否则在外!

哈哈,这个办法够笨吧!
 
我认为你应该这样做 :
不要判断直线与直线的交点,因为你不知道直线与矩形的哪条边相交。
你应该先得到2条直线上的所有点,然后利用PtInRect来判断那些不在
矩形内的点,同时以背景色替换这些点。
所以,解答这个问题的关键是得到2条直线上的所有点!!!
我已经做好了,来信.
forevertyn@sina.com
 
多人接受答案了。
 
to appleyao
你提到的问题应是用线填充多边形的问题,可以采用以下方法:
注意前提:多边形为简单多边形——任意两个不相邻的边不相交。
步骤:
1.假设S1(P1,p2),S2(P2,p3),S3(p3,p4)...Sn-1(Pn-1,pn) 是多边形
2.多边形的范围为 D(minx,miny,Maxx,Maxy)
3.直线段Ls(Lp1,Lp2),Lp1,Lp2 可以取直线与D的交点(Lp1,Lp2应不在多边形内)
4。求出Ls与多边形的所有边S1,S2...Sn的所有交点。并按大小排序为C1,C2,...Cm
如果多边形是闭合的,则m是偶数。
这样,C1—C2,C3—C4,。。。C2k-1—C2k(2k=m)是直线在多边形内部的
其余在多边形外部。

如果多边形不封闭,
则m可奇、可偶,要看具体情况判定,或者如上,或者正好相反。






 
后退
顶部