本帖最后由 llsheng_73 于 2024-1-19 11:01 编辑
只能准确描述C在AB的左边或右边或者在ab线段上或AB的延长线上,一个点和另外两个点应该有4种关系,可以通过以AB为基准,将C点通过TRANS转换为以AB为基准的坐标,然后就可以根据结果进行判断了
- (defun PToLn(p p1 p2)(trans(mapcar(function -)p1 p)0(mapcar(function -)p1 p2)))
- (defun c:tt(/ a b c l p)
- (and(setq a(getpoint"指定A点"))
- (setq b(getpoint"指定B点"A))
- (setq l(distance a b))
- (while(or(grdraw a b 1)(setq c(getpoint"指定C点")))
- (alert(cond((equal(car(setq p(PToLn c a b)))0 1e-8)
- (if(<= 0(caddr p)l)"C在A-B线段上""C在A-B延长线上"))
- ((>(car p)0)"C在A-B左侧")
- ((<(car p)0)"C在A-B右侧")
- )))))
当然,也可以综合TRANS的返回结果的第一个值的0、正、负及最后一个值的负,0-ab长度之间,大于ab长度进一步区分为:线段AB之间、线段AB延长线上(可分前、后)、左,右,左前方、右前方、左后方、右后方
|