乐筑天下

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

[编程交流] 等距多边形

[复制链接]

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:06:25 | 显示全部楼层
 
 
 
 
对不起,我误导了你们
 
我附上了一个样本图像,当在等轴测平面(立方体)中椭圆不存在时,多边形应该是什么样子的,它们只是我的向导,让我能够分割和连接节点以形成多边形
083146zb4au44asasuc7qa.jpg
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:09:04 | 显示全部楼层
 
是的,这与pBe代码有关。。
 
我已经试过了,这就是我得到的。
 
不椭圆不存在
083147j4n2pjc5zce14pv5.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:09:43 | 显示全部楼层
以下是使用变换矩阵映射顶点的示例:
 
  1. [color=GREEN];; Isometric Projection Example  -  Lee Mac[/color]
  2. ([color=BLUE]defun[/color] c:iso ( [color=BLUE]/[/color] c e l m p q v )
  3.    ([color=BLUE]initget[/color] 1 [color=MAROON]"Top Right Left"[/color])
  4.    ([color=BLUE]setq[/color] m
  5.        (mxs
  6.            ([color=BLUE]cdr[/color]
  7.                ([color=BLUE]assoc[/color] ([color=BLUE]getkword[/color] [color=MAROON]"\nSpecify Isometric Projection Plane [Top/Right/Left]: "[/color])
  8.                    ([color=BLUE]list[/color]
  9.                        ([color=BLUE]list[/color] [color=MAROON]"Top"[/color]   ([color=BLUE]list[/color] ([color=BLUE]sqrt[/color] 3.0) ([color=BLUE]sqrt[/color] 3.0)) '(-1.0 1.0))
  10.                        ([color=BLUE]list[/color] [color=MAROON]"Right"[/color] ([color=BLUE]list[/color] ([color=BLUE]sqrt[/color] 3.0)     0.0   ) '( 1.0 2.0))
  11.                        ([color=BLUE]list[/color] [color=MAROON]"Left"[/color]  ([color=BLUE]list[/color] ([color=BLUE]sqrt[/color] 3.0)     0.0   ) '(-1.0 2.0))
  12.                    )
  13.                )
  14.            )
  15.            0.5 [color=GREEN];(/ (sqrt 6.0) 6.0) ;; True projection[/color]
  16.        )
  17.    )
  18.    ([color=BLUE]while[/color]
  19.        ([color=BLUE]progn[/color] ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] e ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=MAROON]"\nSelect LWPolyline: "[/color])))
  20.            ([color=BLUE]cond[/color]
  21.                (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))
  22.                    ([color=BLUE]princ[/color] [color=MAROON]"\nMissed, try again."[/color])
  23.                )
  24.                (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] e))
  25.                    ([color=BLUE]if[/color] ([color=BLUE]/=[/color] [color=MAROON]"LWPOLYLINE"[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 0 ([color=BLUE]entget[/color] e))))
  26.                        ([color=BLUE]princ[/color] [color=MAROON]"\nInvalid object selected."[/color])
  27.                    )
  28.                )
  29.            )
  30.        )
  31.    )
  32.    ([color=BLUE]if[/color] e
  33.        ([color=BLUE]progn[/color]
  34.            ([color=BLUE]setq[/color] e ([color=BLUE]entget[/color] e)
  35.                  l (LM:massoc 10 e)
  36.                  q ([color=BLUE]length[/color] l)
  37.                  c ([color=BLUE]mapcar[/color] '[color=BLUE]/[/color] ([color=BLUE]apply[/color] '[color=BLUE]mapcar[/color] ([color=BLUE]cons[/color] '[color=BLUE]+[/color] l)) ([color=BLUE]list[/color] q q))
  38.                  v ([color=BLUE]mapcar[/color] '[color=BLUE]-[/color] c (mxv m c))
  39.            )
  40.            ([color=BLUE]entmake[/color]
  41.                ([color=BLUE]append[/color]
  42.                    ([color=BLUE]list[/color]
  43.                       '(0 . [color=MAROON]"LWPOLYLINE"[/color])
  44.                       '(100 . [color=MAROON]"AcDbEntity"[/color])
  45.                       '(100 . [color=MAROON]"AcDbPolyline"[/color])
  46.                        ([color=BLUE]assoc[/color] 90 e)
  47.                        ([color=BLUE]assoc[/color] 70 e)
  48.                        ([color=BLUE]assoc[/color] 38 e)
  49.                    )
  50.                    ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( p ) ([color=BLUE]cons[/color] 10 ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] (mxv m p) v))) l)
  51.                    ([color=BLUE]list[/color] ([color=BLUE]assoc[/color] 210 e))
  52.                )
  53.            )
  54.        )
  55.    )
  56.    ([color=BLUE]princ[/color])
  57. )
  58. [color=GREEN];; MAssoc  -  Lee Mac[/color]
  59. [color=GREEN];; Returns all associations of a key in an association list[/color]
  60. ([color=BLUE]defun[/color] LM:MAssoc ( key lst [color=BLUE]/[/color] item )
  61.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] item ([color=BLUE]assoc[/color] key lst))
  62.        ([color=BLUE]cons[/color] ([color=BLUE]cdr[/color] item) (LM:MAssoc key ([color=BLUE]cdr[/color] ([color=BLUE]member[/color] item lst))))
  63.    )
  64. )
  65. [color=GREEN];; Matrix x Vector  -  Vladimir Nesterovsky[/color]
  66. [color=GREEN];; Args: m - nxn matrix, v - vector in R^n[/color]
  67. ([color=BLUE]defun[/color] mxv ( m v )
  68.    ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( r ) ([color=BLUE]apply[/color] '[color=BLUE]+[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]*[/color] r v))) m)
  69. )
  70. [color=GREEN];; Matrix x Scalar - Lee Mac 2010[/color]
  71. [color=GREEN];; Args: m - nxn matrix, n - real scalar[/color]
  72. ([color=BLUE]defun[/color] mxs ( m s )
  73.    ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( r ) ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( n ) ([color=BLUE]*[/color] n s)) r)) m)
  74. )
  75. ([color=BLUE]princ[/color])
083149sbd7z3pzjzw82spb.png
 
注意,上述示例不是真实投影,因为尺寸保持不变;取消注释代码中注明的比例因子,以获得真实的投影维数。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:13:56 | 显示全部楼层
 
我怀疑你打开了osnaps,我应该用entmake而不是命令等价物anyhoo。。在按上/右/左的顺序指定直径和插入点后,我们可以合并沼泽中的代码来绘制椭圆和多边形。
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:19:02 | 显示全部楼层
@MR;
再次尝试代码。是的,你是对的。它处于等轴测顶部模式,但是如果我更改为左或右,它仍然投影顶部等轴圆。
我喜欢这段代码,因为不需要预先绘制多边形或椭圆
 
@李;
谢谢李的帮助。惊讶于您如何将2d多边形“旋转”到等轴测视图中。这也帮了大忙!只需要先绘制多边形,然后再将其投影到等距中。。。但还是很酷!
 
@pBe公司
是的,我打开了OSNAPS
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:19:08 | 显示全部楼层
 
这就解释了结果“甚至不闭合多边形”,我之前建议您修改isoc例程,将多边形的创建一个接一个地包括在内。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:23:14 | 显示全部楼层
以下是我的改进版本,以满足您的需要:
 
  1. (defun transptisotop (pt)
  2. (list (+ (car (polar (list 0.0 0.0 0.0) (/ pi 6.0) (car pt)))
  3.        (car (polar (list 0.0 0.0 0.0) (* 5.0 (/ pi 6.0)) (cadr pt))) )
  4.        (+ (cadr (polar (list 0.0 0.0 0.0) (/ pi 6.0) (car pt)))
  5.        (cadr (polar (list 0.0 0.0 0.0) (* 5.0 (/ pi 6.0)) (cadr pt))) )
  6.        0.0
  7. )
  8. )
  9. (defun transptisoleft (pt)
  10. (list (+ (car (polar (list 0.0 0.0 0.0) (- (/ pi 6.0)) (car pt)))
  11.        (car (polar (list 0.0 0.0 0.0) (/ pi 2.0) (cadr pt))) )
  12.        (+ (cadr (polar (list 0.0 0.0 0.0) (- (/ pi 6.0)) (car pt)))
  13.        (cadr (polar (list 0.0 0.0 0.0) (/ pi 2.0) (cadr pt))) )
  14.        0.0
  15. )
  16. )
  17. (defun transptisoright (pt)
  18. (list (+ (car (polar (list 0.0 0.0 0.0) (- (* 5.0 (/ pi 6.0))) (car pt)))
  19.        (car (polar (list 0.0 0.0 0.0) (/ pi 2.0) (cadr pt))) )
  20.        (+ (cadr (polar (list 0.0 0.0 0.0) (- (* 5.0 (/ pi 6.0))) (car pt)))
  21.        (cadr (polar (list 0.0 0.0 0.0) (/ pi 2.0) (cadr pt))) )
  22.        0.0
  23. )
  24. )
  25. (defun isotop (vertlst squarelst ptci1 ptci2)
  26. (setq vertlstn (mapcar '(lambda (p) (transptisotop p)) vertlst))
  27. (setq isopoltop (entmakex
  28.                    (append
  29.                      (list
  30.                        '(0 . "LWPOLYLINE")
  31.                        '(100 . "AcDbEntity")
  32.                        '(100 . "AcDbPolyline")
  33.                         (cons 90 (length vertlstn))
  34.                        '(70 . 1)
  35.                      )
  36.                      (mapcar '(lambda (x) (cons 10 x)) vertlstn)
  37.                      (list (list 210 0.0 0.0 1.0))
  38.                    )
  39.                  )
  40. )
  41. (setq sqarelstn (mapcar '(lambda (p) (transptisotop p)) squarelst))
  42. (setq isosquaretop (entmakex
  43.                       (append
  44.                         (list
  45.                           '(0 . "LWPOLYLINE")
  46.                           '(100 . "AcDbEntity")
  47.                           '(100 . "AcDbPolyline")
  48.                            (cons 90 (length sqarelstn))
  49.                           '(70 . 1)
  50.                         )
  51.                         (mapcar '(lambda (x) (cons 10 x)) sqarelstn)
  52.                         (list (list 210 0.0 0.0 1.0))
  53.                       )
  54.                     )
  55. )
  56. (setq pta (transptisotop ptci1))
  57. (setq ptb (transptisotop ptci2))
  58. (setq ra (distance '(0.0 0.0 0.0) pta))
  59. (setq rb (distance '(0.0 0.0 0.0) ptb))
  60. (setq isocircletop (entmakex
  61.                       (list
  62.                         '(0 . "ELLIPSE")
  63.                         '(100 . "AcDbEntity")
  64.                         '(100 . "AcDbEllipse")
  65.                         (cons 10 (list 0.0 0.0 0.0))
  66.                         (cons 11 pta)
  67.                         (list 210 0.0 0.0 1.0)
  68.                         (cons 40 (/ rb ra))
  69.                         '(41 . 0.0)
  70.                         (cons 42 (* 2.0 pi))
  71.                       )
  72.                     )
  73. )
  74. )
  75. (defun isoleft (vertlst squarelst ptci1 ptci2)
  76. (setq vertlstn (mapcar '(lambda (p) (transptisoleft p)) vertlst))
  77. (setq isopolleft (entmakex
  78.                     (append
  79.                       (list
  80.                         '(0 . "LWPOLYLINE")
  81.                         '(100 . "AcDbEntity")
  82.                         '(100 . "AcDbPolyline")
  83.                          (cons 90 (length vertlstn))
  84.                         '(70 . 1)
  85.                       )
  86.                       (mapcar '(lambda (x) (cons 10 x)) vertlstn)
  87.                       (list (list 210 0.0 0.0 1.0))
  88.                     )
  89.                   )
  90. )
  91. (setq sqarelstn (mapcar '(lambda (p) (transptisoleft p)) squarelst))
  92. (setq isosquareleft (entmakex
  93.                        (append
  94.                          (list
  95.                            '(0 . "LWPOLYLINE")
  96.                            '(100 . "AcDbEntity")
  97.                            '(100 . "AcDbPolyline")
  98.                             (cons 90 (length sqarelstn))
  99.                            '(70 . 1)
  100.                          )
  101.                          (mapcar '(lambda (x) (cons 10 x)) sqarelstn)
  102.                          (list (list 210 0.0 0.0 1.0))
  103.                        )
  104.                      )
  105. )
  106. (setq pta (transptisoleft ptci1))
  107. (setq ptb (transptisoleft ptci2))
  108. (setq ra (distance '(0.0 0.0 0.0) pta))
  109. (setq rb (distance '(0.0 0.0 0.0) ptb))
  110. (setq isocircleleft (entmakex
  111.                        (list
  112.                          '(0 . "ELLIPSE")
  113.                          '(100 . "AcDbEntity")
  114.                          '(100 . "AcDbEllipse")
  115.                          (cons 10 (list 0.0 0.0 0.0))
  116.                          (cons 11 pta)
  117.                          (list 210 0.0 0.0 1.0)
  118.                          (cons 40 (/ rb ra))
  119.                          '(41 . 0.0)
  120.                          (cons 42 (* 2.0 pi))
  121.                        )
  122.                      )
  123. )
  124. )
  125. (defun isoright (vertlst squarelst ptci1 ptci2)
  126. (setq vertlstn (mapcar '(lambda (p) (transptisoright p)) vertlst))
  127. (setq isopolright (entmakex
  128.                      (append
  129.                        (list
  130.                          '(0 . "LWPOLYLINE")
  131.                          '(100 . "AcDbEntity")
  132.                          '(100 . "AcDbPolyline")
  133.                           (cons 90 (length vertlstn))
  134.                          '(70 . 1)
  135.                        )
  136.                        (mapcar '(lambda (x) (cons 10 x)) vertlstn)
  137.                        (list (list 210 0.0 0.0 1.0))
  138.                      )
  139.                    )
  140. )
  141. (setq sqarelstn (mapcar '(lambda (p) (transptisoright p)) squarelst))
  142. (setq isosquareright (entmakex
  143.                         (append
  144.                           (list
  145.                             '(0 . "LWPOLYLINE")
  146.                             '(100 . "AcDbEntity")
  147.                             '(100 . "AcDbPolyline")
  148.                              (cons 90 (length sqarelstn))
  149.                             '(70 . 1)
  150.                           )
  151.                           (mapcar '(lambda (x) (cons 10 x)) sqarelstn)
  152.                           (list (list 210 0.0 0.0 1.0))
  153.                         )
  154.                       )
  155. )
  156. (setq pta (transptisoright ptci1))
  157. (setq ptb (transptisoright ptci2))
  158. (setq ra (distance '(0.0 0.0 0.0) pta))
  159. (setq rb (distance '(0.0 0.0 0.0) ptb))
  160. (setq isocircleright (entmakex
  161.                         (list
  162.                           '(0 . "ELLIPSE")
  163.                           '(100 . "AcDbEntity")
  164.                           '(100 . "AcDbEllipse")
  165.                           (cons 10 (list 0.0 0.0 0.0))
  166.                           (cons 11 pta)
  167.                           (list 210 0.0 0.0 1.0)
  168.                           (cons 40 (/ rb ra))
  169.                           '(41 . 0.0)
  170.                           (cons 42 (* 2.0 pi))
  171.                         )
  172.                       )
  173. )
  174. )
  175. (defun c:isopolygon (/ pol vertlst rad ptci1 ptci2 squarelst ch)
  176. (vl-cmdf "_.ucs" "w")
  177. (vl-cmdf "_.plan" "")
  178. (vl-cmdf "_.zoom" "c" "0,0,0" "")
  179. (vl-cmdf "_.polygon" pause "0,0,0" "I" pause)
  180. (setq pol (entlast))
  181. (mapcar '(lambda (x) (if (= (car x) 10) (setq vertlst (cons (cdr x) vertlst)))) (entget pol))
  182. (setq vertlst (reverse vertlst))
  183. (setq rad (distance '(0.0 0.0 0.0) (car vertlst)))
  184. (setq ptci1 (polar '(0.0 0.0 0.0) (- (/ pi 4.0)) rad))
  185. (setq ptci2 (polar '(0.0 0.0 0.0) (/ pi 4.0) rad))
  186. (setq squarelst (list (list (- rad) (- rad) 0.0) (list rad (- rad) 0.0) (list rad rad 0.0) (list (- rad) rad 0.0)))
  187. (initget "Top Left Right All")
  188. (setq ch (getkword "\nEnter Top/Left/Right <All> : "))
  189. (cond ((or (eq ch "All") (null ch))
  190.         (isotop vertlst squarelst ptci1 ptci2)
  191.         (setq sstop (ssadd))
  192.         (ssadd isopoltop sstop)
  193.         (ssadd isosquaretop sstop)
  194.         (ssadd isocircletop sstop)
  195.         (vl-cmdf "_.move" sstop "" (cdr (assoc 10 (entget isosquaretop))) '(0.0 0.0 0.0) )
  196.         (isoleft vertlst squarelst ptci1 ptci2)
  197.         (setq ssleft (ssadd))
  198.         (ssadd isopolleft ssleft)
  199.         (ssadd isosquareleft ssleft)
  200.         (ssadd isocircleleft ssleft)
  201.         (vl-cmdf "_.move" ssleft "" '(0.0 0.0 0.0) (cdr (assoc 10 (entget isosquareleft))) )
  202.         (isoright vertlst squarelst ptci1 ptci2)
  203.         (setq ssright (ssadd))
  204.         (ssadd isopolright ssright)
  205.         (ssadd isosquareright ssright)
  206.         (ssadd isocircleright ssright)
  207.         (vl-cmdf "_.move" ssright "" '(0.0 0.0 0.0) (cdr (assoc 10 (entget isosquareright))) )
  208.        )
  209.        ((eq ch "Top")
  210.         (isotop vertlst squarelst ptci1 ptci2)
  211.        )
  212.        ((eq ch "Left")
  213.         (isoleft vertlst squarelst ptci1 ptci2)
  214.        )
  215.        ((eq ch "Right")
  216.         (isoright vertlst squarelst ptci1 ptci2)
  217.        )
  218. )
  219. (entdel pol)
  220. (vl-cmdf "_.ucs" "p")
  221. (princ)
  222. )
M.R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:26:41 | 显示全部楼层
下面是另一个版本,使用椭圆方程,基于活动等参平面:
 
[code][颜色=绿色]------------------=={Isometric Polygon}==----------------;;;;;;允许用户构造投影的正多边形;;;;在主动等轴测平面中;;;;-----------------------------------------------------------------;;;;作者:Lee Mac,版权所有©2012-www.Lee-Mac。通用域名格式;;;;-----------------------------------------------------------------;;defunc:isopoly(/a b c i l m p r s)(ifnulln)(setqn 6))(while
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:30:32 | 显示全部楼层
如果我注意到的话,你的代码李的目的是什么?。。。我已经更新了我的,以匹配OP的图像,根据你的代码,投影多边形的比例不正确,你还没有包括顶部、左侧、右侧和所有投影的选项(可能我遗漏了什么-你的matrix变体比我的要先进得多,但所有这些都是真的必要的)?
 
M、 R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:32:16 | 显示全部楼层
 
对不起,我忘了包括多边形半径乘数-我已经更新了上述代码,还包括了一个简短的演示。
 
然而,我要声明的是,原始程序将在每个等轴测平面中构造多边形(基于活动等轴测平面,如上图所示)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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