关于圆弧顺时针逆时针的问题
已知两个端点坐标,圆心坐标和半径,请问怎么样才能判断出圆弧的转向,希望大家指点下.我给出几个特例,希望大家验证一下,例子1.p1(95.8802,400.8767),p2(79.2644,432.9074),
o1(5442.7650,2451.9570),r=6230.19
例子2.p1(721.5960,782.164) p2(563.1196,710.387),
o1(705.756,606.300),r=176.576 <BR>
谢谢大家 怎么没人回答呀,呵呵 '用函数snsj(p1(),p2(),p3())可以确定点p1、p2、p3的顺时针或逆时针排列顺序。例如:<BR>'p1(1) = 95.8802: p1(2) = 400.8767<BR>'p2(1) = 79.2644: p2(2) = 432.9074<BR>'o1(1) = 5442.765: o1(2) = 2451.957<BR>'snsj(p1(),p2() ,o1())=False, p1、p2、o1三点逆时针排列
'p1(1) = 721.596: p1(2) = 782.164<BR>'p2(1) = 563.1196: p2(2) = 710.387<BR>'o1(1) = 705.756: o1(2) = 606.3<BR>'snsj(p1(),p2() ,o1())=True, p1、p2、o1三点顺时针排列
Private Function snsj(ByRef p1() As Double, ByRef p2() As Double, ByRef p3() As Double) As Boolean<BR> Dim sj As Double<BR> sj = p1(1) * p2(2) + p2(1) * p3(2) + p3(1) * p1(2) - p2(1) * p1(2) - p3(1) * p2(2) - p1(1) * p3(2)<BR> snsj = False '逆时针<BR> If sj < 0# Then snsj = True '顺时针
End Function 这样没办法判断。 已知两个端点坐标,圆心坐标和半径是不能够判断的,条件差太多,首先两个端点谁是起点谁是终点不知道,所以就是两个表面看起来一样的弧,起点和终点不一样,顺时针和逆时针都有可能,再次,如果没有弧的长度,即使两个弧的起点和终点一样,一个优弧一个劣弧,它的旋转方向也不一样(这里面还要考虑如果是半圆弧的情况,有点难度)!!如果要判断的弧是已经存在的,可以读取它的起点终点,半径,圆心,算出来Bulge,然后可以用程序绘制同样的弧,再判断这个弧的起点和终点是不是和原来的弧的起点和终点重合,如果重合则是逆时针,如果不重合则是顺时针,因为由程序生成的弧都是逆时针的。
页:
[1]