图7.9 用弧长法测试点的包含性

表7-1-1 端点的符号对变化与弧长变化的关系

(xi,yi)
(xi+1,yi+1)
象限变化
弧长变化
(+,+)
(+,+)
I→I
0
(+,+)
(-,+)
I→II
π/2
(+,+)
(-,-)
I→III
±π
(+,+)
(+,-)
I→IV
-π/2
(-,+)
(+,+)
II→I
-π/2
(-,+)
(-,+)
II→II
0
(-,+)
(-,-)
II→III
π/2
(-,+)
(+,-)
II→IV
±π
(-,-)
(+,+)
III→I
±π
(-,-)
(-,+)
III→II
-π/2
(-,-)
(-,-)
III→III
0
(-,-)
(+,-)
III→IV
π/2
(+,-)
(+,+)
IV→I
π/2
(+,-)
(-,+)
IV→II
±π
(+,-)
(-,-)
IV→III
-π/2
(+,-)
(+,-)
IV→IV
0

��至此,我们可以给出改进的弧长法的算法步骤:
��(1) 按照表7-1-1建立端点的符号对与弧长的对应关系表;
��(2) 作平移变换,将坐标系的原点平移到给定点P;
��(3) 根据多边形每一条边的起始点和终止点的符号对查表,得到相应的弧长;
��(4) 累加所有的弧长,如果等于2π,则P位于多边形的内部;如果结果为0,则P位于多边形的外部或边界上。
��当判断点P是否位于多边形内时,上述算法的优点是十分突出的:计算速度很快,算法稳定性好。如果要进一步区别P点是位于多边形的外部还是边界上,也只需增加很少的判断代码即可。这作为作业,留给读者自己完成。