乐筑天下

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

[编程交流] 查找周围3个点的列表

[复制链接]

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 07:20:44 | 显示全部楼层 |阅读模式
你好,朋友们
有人能帮我找到围绕三角形内一个点的3d人脸头部列表吗
我想根据三维面头部(位于该三维面内的点)的坐标(x,y,z)找到该点的高程
该图形由三维面组成,所有面都形成三角形
谢谢
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:28:57 | 显示全部楼层
听起来像是试图从DTM中提取给定面的质心高程。
 
实际上,您是在寻找质心高程还是另一个点?
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 07:34:22 | 显示全部楼层
实际上需要在3dface cosist的3point内任何点内的高程
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:38:43 | 显示全部楼层
找到一个相关的3dFace将是一件耗时的事情。基本上只使用拾取点的XY值&3个角来确定该点是否在三维面内,如果不在三维面内,则继续到下一个三维面。检查IMO的最简单方法是查看拾取点周围的连续角点按顺时针/逆时针顺序排列。
 
接下来会更快(虽然有点复杂):使用两个角在一个方向上绘制delta-z,然后将delta-z朝向第三个点(尖端-使用垂直线,将半pi添加到角度和inters,然后获得交点)。然后计算出拾取点沿第一个方向有多远(同样是perp inters的想法)。然后从那一点到第二个方向有多远。从最后一个得到一个比率,将其乘以相关的delta-Z,然后加上第一个角点的Z值。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:39:18 | 显示全部楼层
如果3DFace可以转换为平面(不是共线点),并且该点是实际的点实体,则可以使用ssget“WP”((0.“点”))。
 
找到由3dface形成的平面的法线,然后将点(trans)到该OCS中,并提取Z轴值。
 
-大卫
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 07:46:44 | 显示全部楼层
一个拾取点将是(x,y),然后我将计算z值,使拾取点通过此公式属于偶数
z=-(AX+X+D)/C
其中三点坐标为(X0 Y0 Z0)(X1 Y1 Z1)(X2 Y2 Z2)
 
A=(Y1-Y0)(Z2-Z0)-(Z1-Z0)(Y2-Y0)
B=(X2-X0)(Z1-Z0)-(Z2-Z0)(X1-X0)
C=(X1-X0)(Y2-Y0)-(X2-X0)(Y1-Y0)
D=X0(Y2Z1-Y1Z2)+X1(Y0Z2-Y2Z0)+X2(Y1Z0-Y0Z1)
如果我得到th 3点的坐标,我可以在这个公式中使用它来得到z值
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 07:49:35 | 显示全部楼层
试试这个(你的公式):
 
  1. (defun c:test ( / p1 p2 p3 p4 a b c)
  2.    (setq p1 (getpoint "first point 3Dface")
  3.          p2 (getpoint "second point 3Dface")
  4.          p3 (getpoint "third point 3Dface")
  5.          p4 (getpoint "point inside")
  6.    )
  7.    (setq a (-
  8.                (* (- (cadr p1) (cadr p2)) (- (caddr p1) (caddr p3)))
  9.                (* (- (caddr p1) (caddr p2)) (- (cadr p1) (cadr p3)))
  10.    )       )
  11.    (setq b (-
  12.                (* (- (caddr p1) (caddr p2)) (- (car p1) (car p3)))
  13.                (* (- (car p1) (car p2)) (- (caddr p1) (caddr p3)))
  14.    )       )
  15.    (setq c (-
  16.                (* (- (car p1) (car p2)) (- (cadr p1) (cadr p3)))
  17.                (* (- (cadr p1) (cadr p2)) (- (car p1) (car p3)))
  18.    )       )
  19.    (setq z (+
  20.                (/
  21.                    (-
  22.                        (+
  23.                            (* (- (car p4) (car p1)) a)
  24.                            (* (- (cadr p4) (cadr p1)) b)
  25.                        )
  26.                    )
  27.                    c
  28.                )
  29.                (caddr p1)
  30.            )
  31.    )
  32. )

 
或者这个(我用):
 
  1. (defun c:test (/ p1 p2 p3 p4 p5)
  2.    (if (not (member "geomcal.arx" (arx))) (arxload "geomcal"))
  3.    (setq p1 (getpoint "first point 3Dface")
  4.          p2 (getpoint "second point 3Dface")
  5.          p3 (getpoint "third point 3Dface")
  6.          p4 (getpoint "point inside")
  7.          p5 (list (car p4) (cadr p4) (+ (caddr p4) 1.0))
  8.    )
  9.    (setq z (caddr (cal "z=ilp(p4,p5,p1,p2,p3)")))
  10. )
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 07:53:33 | 显示全部楼层
谢谢大家
问题是搜索不是拾取点的点,并自动拥有3个点的坐标列表
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 07:59:43 | 显示全部楼层
用可用坐标替换(setq p4(getpoint“\n Point inside”))。
 
我看到一个代码(由李)找到一个点里面,但找不到它,这是我用的。
 
 
  1. (defun c:test ( / 3DF p1 p2 p3 p4 n z)
  2.    (if (and
  3.            (setq 3DF (ssget "_X" '((0 . "3DFACE"))))
  4.            (setq p4 (getpoint "\nPoint inside"))
  5.        )
  6.        (progn
  7.            (setq n (sslength 3DF))
  8.            (while (and (not z) (> n 0))
  9.                (setq e1 (entget (ssname 3DF (setq n (1- n)))))
  10.                (setq z (p_inside))
  11.            )
  12.            (if z (alert (strcat "z = " (rtos z 2 2)))
  13.                  (alert "Point outside")
  14.            )              
  15.        )
  16.        (alert "3Dface not found in dwg")
  17.    )
  18. )
  19. (defun p_inside (/ ang_p1p ang_p1_2 ang_p1_3 ang_p2p ang_p2_1 ang_p2_3
  20.                   ang_p3p ang_p3_1 ang_p3_2 ang_p1- ang_p1+ ang_p2- ang_p2+
  21.                   ang_p3- ang_p3+ COMPR)
  22.    (setq p1 (cdr (assoc 10 e1)))
  23.    (setq p2 (cdr (assoc 11 e1)))
  24.    (setq p3 (cdr (assoc 12 e1)))
  25.    (setq ang_p1p (angle p1 p4))
  26.    (setq ang_p1_2 (angle p1 p2))
  27.    (setq ang_p1_3 (angle p1 p3))
  28.    (setq ang_p2p (angle p2 p4))
  29.    (setq ang_p2_1 (angle p2 p1))
  30.    (setq ang_p2_3 (angle p2 p3))
  31.    (setq ang_p3p (angle p3 p4))
  32.    (setq ang_p3_1 (angle p3 p1))
  33.    (setq ang_p3_2 (angle p3 p2))
  34.    (setq ang_p1- (min ang_p1_2 ang_p1_3))
  35.    (setq ang_p1+ (max ang_p1_2 ang_p1_3))
  36.    (setq ang_p2- (min ang_p2_1 ang_p2_3))
  37.    (setq ang_p2+ (max ang_p2_1 ang_p2_3))
  38.    (setq ang_p3- (min ang_p3_1 ang_p3_2))
  39.    (setq ang_p3+ (max ang_p3_1 ang_p3_2))     
  40.    (setq COMPR 0)
  41.    (if (and
  42.            (< ang_p1- (/ pi 2))
  43.            (> (- ang_p1+ ang_p1-) pi)
  44.        )
  45.        (progn
  46.            (if
  47.                (or
  48.                    (> ang_p1p ang_p1+)
  49.                    (< ang_p1p ang_p1-)
  50.                )
  51.                (setq COMPR (1+ COMPR))
  52.            )
  53.        )
  54.    )
  55.    (if (and
  56.            (< ang_p2- (/ pi 2))
  57.            (> (- ang_p2+ ang_p2-) pi)
  58.        )
  59.        (progn
  60.            (if
  61.                (or
  62.                    (> ang_p2p ang_p2+)
  63.                    (< ang_p2p ang_p2-)
  64.                )
  65.                (setq COMPR (1+ COMPR))
  66.            )
  67.        )
  68.    )      
  69.    (if (and
  70.            (< ang_p3- (/ pi 2))
  71.            (> (- ang_p3+ ang_p3-) pi)
  72.        )
  73.        (progn
  74.            (if
  75.                (or
  76.                    (> ang_p3p ang_p3+)
  77.                    (< ang_p3p ang_p3-)
  78.                )
  79.                (setq COMPR (1+ COMPR))
  80.            )      
  81.        )
  82.    )
  83.    (if (and (> ang_p1p ang_p1-) (< ang_p1p ang_p1+)) (setq COMPR (1+ COMPR)))
  84.    (if (and (> ang_p2p ang_p2-) (< ang_p2p ang_p2+)) (setq COMPR (1+ COMPR)))
  85.    (if (and (> ang_p3p ang_p3-) (< ang_p3p ang_p3+)) (setq COMPR (1+ COMPR)))
  86.    (if (= COMPR 3)
  87.        (progn
  88.            (setq p5 (list (car p4) (cadr p4) (+ (caddr p4) 1.0)))
  89.            (setq z (caddr (cal "z=ilp(p4,p5,p1,p2,p3)")))
  90.        )
  91.    )
  92.    z
  93. )
  94. (if (not (member "geomcal.arx" (arx))) (arxload "geomcal"))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:05:03 | 显示全部楼层
 
http://www.cadtutor.net/forum/showthread.php?73731-点-内部或外部-多段线&p=502328&viewfull=1#post502328
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:37 , Processed in 0.763790 second(s), 83 queries .

© 2020-2025 乐筑天下

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