hnge 发表于 2005-6-11 21:49:00

关于圆弧顺时针逆时针的问题

已知两个端点坐标,圆心坐标和半径,请问怎么样才能判断出圆弧的转向,希望大家指点下.我给出几个特例,希望大家验证一下,


例子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>                               


谢谢大家

hnge 发表于 2005-6-12 16:05:00

怎么没人回答呀,呵呵

yshf 发表于 2005-7-1 13:49:00

'用函数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 &lt; 0# Then snsj = True       '顺时针


End Function

mccad 发表于 2005-7-1 21:38:00

这样没办法判断。

yj821005 发表于 2005-7-4 08:51:00

已知两个端点坐标,圆心坐标和半径是不能够判断的,条件差太多,首先两个端点谁是起点谁是终点不知道,所以就是两个表面看起来一样的弧,起点和终点不一样,顺时针和逆时针都有可能,再次,如果没有弧的长度,即使两个弧的起点和终点一样,一个优弧一个劣弧,它的旋转方向也不一样(这里面还要考虑如果是半圆弧的情况,有点难度)!!如果要判断的弧是已经存在的,可以读取它的起点终点,半径,圆心,算出来Bulge,然后可以用程序绘制同样的弧,再判断这个弧的起点和终点是不是和原来的弧的起点和终点重合,如果重合则是逆时针,如果不重合则是顺时针,因为由程序生成的弧都是逆时针的。
页: [1]
查看完整版本: 关于圆弧顺时针逆时针的问题