找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1030|回复: 7

[求助]:如何判断一个点在一条直线起始点的哪一侧?

[复制链接]
发表于 2005-4-7 12:17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何判断一个点在一条直线起始点的哪一侧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-10 19:48:31 | 显示全部楼层
用distcane函数求出点到线的起始点各自距离,再判断各自的大小不就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-11 13:29:01 | 显示全部楼层
你是不是问在直线左侧或右侧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-12 07:59:24 | 显示全部楼层
是问在直线左侧或右侧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-12 08:15:53 | 显示全部楼层

  1. ;; Tony Tanzillo.
  2.   ;; (vector-side (origin)(direction)(point) )
  3.   ;; Returns an integer code indicating position of (point)
  4.   ;; in relation to the directed vector whose endpoints are
  5.   ;; <origin> and <direction>.
  6.   ;;   Result  Meaning
  7.   ;;    -1     Point is to the right of vector.
  8.   ;;     0     Point is on (colinear with) vector
  9.   ;;     1     Point is to the left of vector.
  10.   ;; usage : (vector-side (getpoint) (getpoint) (getpoint))

  11.   (defun VECTOR-SIDE (V1 V2 P / R)
  12.     (setq R (- (* (- (car V2) (car V1)) (- (cadr P) (cadr V1)))
  13.                (* (- (cadr V2) (cadr V1)) (- (car P) (car V1)))
  14.             )
  15.     )
  16.     (cond ((equal R 0.0 1e-8) 0)
  17.           (t (fix (/ (abs R) R)))
  18.     )
  19.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-12 09:29:58 | 显示全部楼层
以前做的一个autolisp程序,供参考:
  (setq lena (distance interpt entanpt))
  (setq lenb (distance interpt entbnpt))
  (setq lenc (distance entanpt entbnpt))
  (setq fr (* 2 lena lenb))
  (setq fx (- (+ (expt lena 2) (expt lenb 2)) (expt lenc 2)))
  (setq fy (sqrt (- (expt fr 2) (expt fx 2))))

  (if (/= fx 0)
    (setq angc (atan (/ fy fx)))
    (setq angc (/ pi 2))
  )
  (if (< angc 0)                        ;第四象限(负角度)转成第二象限(钝角)
    (setq angc (+ angc pi))
  )

;;;******平面直角坐标变换,判断角度为顺时针或逆时针********
  (setq alfa (angle entanpt entbnpt))        ;已是二维点的数据
  (setq x1 (car entanpt))
  (setq y1 (cadr entanpt))
  (setq x2 (car interpt))
  (setq y2 (cadr interpt))
  (setq        xalfa (* (sin alfa)
                 (- (- x2 x1) (/ (- y2 y1) (/ (sin alfa) (cos alfa))))
              )
  )

  (if (> xalfa 0)
    (setq angc (- angc))
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-12 11:02:26 | 显示全部楼层
判断点在直线上的位置

[php]  
(defun pntonline(p1 p2 p3 / p c B C P)
  (setq p p3)

  (apply '+ (mapcar '(lambda (b)
    (setq c(- (* (car p) (cadr b)) (* (cadr p) (car b))) p b )c )
    (list p1 p2 p3)))
)

功能

判断点在直线上的位置

参数

p1,p2:直线上的两点,例如直线上的起点和端点

p3:所要判断的点

返回值

点的位置,等于0时(equal k 0.0 0.00000001)点在线上,

大于0时点在线的左侧,小于0时点在线的右侧

示例

(setq k(pntonline p1 p2 p3))

[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-12 12:23:39 | 显示全部楼层
谢谢青铜长老!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-22 06:12 , Processed in 0.497762 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表