在任意角度的直线旁边点取一点A(如图),如何辨别该点是在直线的左边还是右边?
在任意角度的直线旁边点取一点A(如图),如何辨别该点是在直线的左边还是右边?可以通过获取直线坐标点计算出方位角,然后以直线起点为基点旋转判断点和直线至方位角为0度,判断x,y大小不就行了? 直线AB,点为C,
Returns an angle in radians of a line defined by two endpoints
(angle pt1 pt2)
求得A->B及A->C的角度A1、A2,校验A2-A1之差是否大于零。
;用向量叉积来判断
(defun c:test()
(setq eps 1e-6) ;计算误差
(if (setq p1 (getpoint "\n直线起点:"))
(if (setq p2 (getpoint p1 "\n直线终点:"))
(while (setq pt (getpoint "\n待判断点:"))
(setq dxy1 (mapcar '- p2 p1) ;向量P1->p2
dxy2 (mapcar '- pt p1) ;向量P1->pt
;向量叉积
xlcj (- (* (car dxy1) (cadr dxy2)) (* (cadr dxy1) (car dxy2)))
)
(cond ((<= (- eps) xlcj eps) (princ "\n点在直线上(包括在延长线上)"))
((> xlcjeps) (princ "\n点在直线左侧"))
((< xlcj (- eps)) (princ "\n点在直线右侧"))
)
)
)
)
(princ)
)
;; 云共享 http://yunpan.cn/QXQKsW9gAPmpF
(defun c:tt ()
(setq s1 (car (entsel "\n选择直线: "))
p1 (xyp-DXF 10 s1)
p2 (xyp-DXF 11 s1)
)
(while (setq p3 (getpoint "\n基点<退出>: "))
(setq tx (if (xyp-PlineCCW-Check (list p1 p2 p3)) "左" "右"))
(xyp-Text 5 p3 tx)
)
(princ)
) 谢谢以上各位帮助,问题已解决 本帖最后由 自贡黄明儒 于 2013-9-29 13:38 编辑
highflybird在trans讲解中是这样判断的
;;通过正负判断
(car (trans (mapcar '- (getpoint "\n 被判断点") (setq p1 (getpoint "\n 直线起点"))) 0 (mapcar '- (getpoint "\n 直线终点") p1))) 自贡黄明儒 发表于 2013-9-29 12:31 static/image/common/back.gif
highflybird在trans讲解中是这样判断的
;;通过正负判断
谢谢,你这简洁,
页:
[1]