clh521 发表于 2013-9-28 15:34:43

在任意角度的直线旁边点取一点A(如图),如何辨别该点是在直线的左边还是右边?

在任意角度的直线旁边点取一点A(如图),如何辨别该点是在直线的左边还是右边?

newbuser 发表于 2013-9-28 16:41:02

可以通过获取直线坐标点计算出方位角,然后以直线起点为基点旋转判断点和直线至方位角为0度,判断x,y大小不就行了?

vectra 发表于 2013-9-28 20:23:00

直线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之差是否大于零。

yshf 发表于 2013-9-28 21:43:32


;用向量叉积来判断
(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)
)

xyp1964 发表于 2013-9-28 22:00:33


;; 云共享 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)
)

clh521 发表于 2013-9-29 08:09:08

谢谢以上各位帮助,问题已解决

自贡黄明儒 发表于 2013-9-29 12:31:26

本帖最后由 自贡黄明儒 于 2013-9-29 13:38 编辑

highflybird在trans讲解中是这样判断的

;;通过正负判断
(car (trans (mapcar '- (getpoint "\n 被判断点") (setq p1 (getpoint "\n 直线起点"))) 0 (mapcar '- (getpoint "\n 直线终点") p1)))

clh521 发表于 2013-9-29 14:55:42

自贡黄明儒 发表于 2013-9-29 12:31 static/image/common/back.gif
highflybird在trans讲解中是这样判断的

;;通过正负判断


谢谢,你这简洁,
页: [1]
查看完整版本: 在任意角度的直线旁边点取一点A(如图),如何辨别该点是在直线的左边还是右边?