找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 711|回复: 5

[求助]:怎样判断?

[复制链接]
发表于 2003-2-7 00:52:49 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-7 01:39:58 | 显示全部楼层

Re: [求助]:怎样判断?

最初由 suzhanli 发布
[B]怎样判断一个点在任意直线的哪一侧呢? [/B]


可以利用求点到直线的距离的计算公式,根据左下(右上),距离值的征服符号不同来判断。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-7 02:06:30 | 显示全部楼层
准确的说,要分两种情况:
假设点为P1(X1,Y1)
(1)直线是x=a 的情况,
X1>a时,点在线右侧;
X1<a时,点在线左侧;
X1=a时,点在线上;

(2)直线是y=kx+b 的情况
Y1>kX1+b时,点在线上侧;
Y1<kX1+b时,点在线下侧;
Y1=kX1+b时,点在线上。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-7 02:25:02 | 显示全部楼层
下面是求点到直线的距离的LSP代码,根据公式算法稍加转换就可以变成VBA代码

1、距离>0 点在直线(起点、终点)矢量方向的逆时针(左上方)
2、距离=0 , 点在直线上
3、距离<0, 点在直线(起点、终点)矢量方向的顺时针(右下方)
  1. <normalfont>
  2. ;;求点P0到P1,P2连直线距离.
  3. (defun p2l (p0 p1 p2 / x1 y1 x2 y2 c1 c2 c3)
  4.   (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2) c1 (- y2 y1)
  5.         c2 (- x1 x2) c3 (sqrt (+ (* c1 c1)(* c2 c2))) c1 (/ c1 c3)
  6.         c2 (/ c2 c3) c3 (/ (- (* x2 y1)(* x1 y2)) c3)
  7.   )
  8.   (+ (* c1 (car p0)) (* c2 (cadr p0)) c3)
  9. )
  10. </font>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-2-7 02:50:22 | 显示全部楼层
明白了!
下面是转换成VB.Net的代码:
Public Function ptToLineDistance(ByVal p0 As Object, ByVal p1 As Object, ByVal p2 As Object)   As Double
        Dim x1, y1, x2, y2 As Double
        Dim c1, c2, c3 As Double
        x1 = p1(0) : y1 = p1(1)
        x2 = p2(0) : y2 = p2(1)
        c1 = y2 - y1
        c2 = x1 - x2
        c3 = Math.Sqrt(c1 ^ 2 + c2 ^ 2)
        c1 = c1 / c3
        c2 = c2 / c3
        c3 = (x2 * y1 - x1 * y2) / c3
        Return c1 * p0(0) + c2 * p0(1) + c3
    End Function

不过,按上述代码,XD好像说反了!应为:
        1、距离<0 点在直线(起点、终点)矢量方向的逆时针(左上方)
        2、距离=0 , 点在直线上
        3、距离>0, 点在直线(起点、终点)矢量方向的顺时针(右下方)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 07:20 , Processed in 0.184959 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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