已知 圆弧的半径 起始角 终止角 圆心坐标 求凸度(正负)
如题:求凸度值 及圆弧的绘制方向是“顺时针”— ,还是“逆时针“+。请各位大侠帮忙啊!! 本帖最后由 yjtdkj 于 2021-6-28 11:40 编辑;取圆弧凸度-------------yjtdkj by 2021.06
(defun c:tt ()
(progn
(defun yj-dxf (key ename) (cdr (assoc key (entget ename))))
(defun mid (p1 p2)
(mapcar (function (lambda (e1 e2) (* (+ e1 e2) 0.5))) p1 p2)
)
)
(setq en (car (entsel)))
(setq
r (dxf 40 en)
pt1 (vlax-curve-getstartPoint en)
pt2 (vlax-curve-getEndPoint en)
ptm (mid pt1 pt2)
len (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en))
cpm (vlax-curve-getpointAtdist en (/ len 2))
dis (distance pt1 pt2)
h (distance ptm cpm)
)
(setq tu (/ h (* dis 0.5)))
(setq
a (-(cadr pt2) (cadr pt1))
b (-(car pt1)(car pt2))
c (-(* -1 a (car pt1))(* b (cadr pt1)))
d1 (-(* -1 a (car cpm))(* b (cadr cpm)))
)
(cond
((= d1 c)
(* tu 0)
)
((> d1 c)
(* tu -1)
)
((< d1 c)
(* tu 1)
)
)
)
凸度值等于弦高除与弦长的一半,逆时针为正值,顺时针为负值 谢谢回复!关键是 我 如何判断已有的弧是“逆时针”还是“顺时针”? /// <summary>
/// 判断1,2,3三个点的依次走向为顺时针还是逆时针走向
/// 顺时针返回-1,逆时针返回1,点重合或在一条直线上返回0
/// </summary>
/// <param name="P1">第一个点</param>
/// <param name="P2">第二个点</param>
/// <param name="P3">第三个点</param>
/// <returns>顺时针返回-1,逆时针返回1,点重合或在一条直线上返回0</returns>
static public int Clockwise(Point3d P1, Point3d P2, Point3d P3)
{
double A = P3.Y - P1.Y;
double B = P1.X - P3.X;
double C = -1.0 * A * P1.X - B * P1.Y;
double d1 = -A * P2.X - B * P2.Y;
if (d1 == C)
return 0;
else if (d1 > C)
return -1;
else
return 1;
} 谢谢!非常感谢! 哎呀! 起点 终点 没有第三点啊?!! 还有圆心呀,两点你怎么能判断时钟走向? 新手,请谅解!! 再请教,圆心点是P1 P2 还是P3? P1是起点的话,那么P3是圆心,P2是起点的话,P1是圆心 自己测试看看更清楚
页:
[1]
2