圆弧方向判断方法和三点确定一个圆的计算方法

圆弧方向判断方法

p1=(x1,y1) 
 p2=(x2,y2)
 
p3=(x3,y3)  
求向量  

   p12=(x2-x1,y2-y1)    

   p23=(x3-x2,y3-y2)   
则当 p12p23的叉乘(向量积)  

   p12 x   p23  =   (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2)  
   
  为正时,p1-p2-p3   路径的走向为逆时针,  
  为负时,p1-p2-p3   走向为顺时针,  
  为零时,p1-p2-p3   所走的方向不变,亦即三点在一直线上。

可以应用在判断三点确定圆弧,圆弧是逆时针画,还是顺势针画。


求三点的夹角
利用向量的知识
 A(a,b),B(c,d)是向量
 cosA(A,B)=(A*B)/(|A|*|B|)= (a*c+b*d)/(sqrt(a*a+b*b)*sqrt(c*c+d*d))
 A=acos(cosA)/M_PI*180
 M_PI在math.h头文件中注释掉了。#define M_PI       3.14159265358979323846
   
 注意点在计算中误差值比如cosA = 0.999999998 不是1 在A=acos(cosA)/M_PI*180得到的值是近0的1.2e-6 但是不是0。


SetArcDirection

 
VB声明
Declare Function SetArcDirection Lib "gdi32" Alias "SetArcDirection" (ByVal hdc As Long, ByVal ArcDirection As Long) As Long
说明
设置圆弧的描绘方向
返回值
Long,如执行成功,返回原始的圆弧方向;零意味着出错
参数表
参数类型及说明
hdcLong,要设置的设备场景
ArcDirectionLong,AD_CLOCKWISE (顺时针)或 AD_COUNTERCLOCKWISE (逆时针)
注解
可应用于下列函数:Arc, arcto, chord, Ellipse, pie, Rectangle 和 RoundRect

Windows 默认是顺时针方向?