圆弧方向判断方法
设p1=(x1,y1)
p2=(x2,y2)
p3=(x3,y3)
求向量
则当 p12与p23的叉乘(向量积)
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。
设p1=(x1,y1)
p2=(x2,y2)
p3=(x3,y3)
求向量
p12=(x2-x1,y2-y1)
p23=(x3-x2,y3-y2)则当 p12与p23的叉乘(向量积)
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 默认是顺时针方向?
Windows 默认是顺时针方向?