乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: havano

边界内还是边界外?如何发现?

[复制链接]

32

主题

142

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
270
发表于 2006-6-10 09:15:39 | 显示全部楼层

对于直线的绿色向量,点在一侧,对于红色向量,它在另一侧。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-6-10 15:33:37 | 显示全部楼层
这个解决方案来自我们沼泽上的一位俄罗斯朋友,不记得是谁了。
  1. (defun insidep (pt ent / big flag obj1 obj2 obj3 p1 p2 small)
  2.   (vl-load-com)
  3.   (if (and pt ent)
  4.     (progn
  5.       (setq obj1 (vlax-ename->vla-object ent))
  6.       (setq obj2 (car (vlax-invoke obj1 'Offset 0.001))
  7.             obj3 (car (vlax-invoke obj1 'Offset -0.001))
  8.             ) ;_ end of setq
  9.       (if (> (vla-get-area obj2) (vla-get-area obj3))
  10.         (progn
  11.           (set 'big obj2)
  12.           (set 'small obj3)
  13.           ) ;_ end of progn
  14.         (progn
  15.           (set 'big obj3)
  16.           (set 'small obj2)
  17.           ) ;_ end of progn
  18.         ) ;_ end of if
  19.       (setq p1 (vlax-curve-getClosestPointTo big pt)
  20.             p2 (vlax-curve-getClosestPointTo small pt)
  21.             ) ;_ end of setq
  22.       (if (> (distance pt p1) (distance pt p2))
  23.         (setq flag T)
  24.         (setq flag nil)
  25.         ) ;_ end of if
  26.       (mapcar (function (lambda (x)
  27.                           (progn
  28.                             (vla-delete x)
  29.                             (vlax-release-object x)
  30.                             ) ;_ end of progn
  31.                           ) ;_ end of lambda
  32.                         ) ;_ end of function
  33.               (list big small)
  34.               ) ;_ end of mapcar
  35.       ) ;_ end of progn
  36.     ) ;_ end of if
  37.   flag
  38.   )

回复

使用道具 举报

12

主题

150

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2006-6-10 17:09:09 | 显示全部楼层
这就是我不喜欢Lisp的原因:对我来说这是俄语。我不知道会发生什么。代码看起来足够紧凑,但我不知道如何将其嵌入VBA宏,更不用说VB可执行文件了<是我的错,我敢肯定。。。
回复

使用道具 举报

12

主题

150

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2006-6-12 20:37:49 | 显示全部楼层
这个想法是,你从0,001开始,在两个方向上偏移你拥有的边界。比您在两条新折线上搜索最接近您的pt的点。你看看哪一个更接近你的观点。是否定的,偏移它在里面,否则不是,
我希望我能帮助,
Bernd
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2006-6-12 21:00:41 | 显示全部楼层

好的,凹多边形是一种不同的球类游戏。您仍然可以使用neg/pos例程,但您必须使用集合论/布尔逻辑来组合边缘创建的半空间,这创建了一个可以描述为参数方程的表面,您可以插入一个点并找出它是进还是出-这不是一件小事-不过。
另一种选择是将您的多边形分解为简单的凸形(例如三角),并对每个新形状进行neg/pos测试,一旦您获得“pos”命中,它就必须在多边形内。
有很多方法可以做到这一点,但您需要权衡复杂性和准确性与速度。
干杯,
米克。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 18:40 , Processed in 0.779664 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表