乐筑天下

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

[编程交流] 管子斜接端椭圆

[复制链接]

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 11:44:50 | 显示全部楼层 |阅读模式
我知道我以前做过这件事,但我现在一片空白。
 
最终结果是一个具有给定直径和油管切割角度的3DPOLY椭圆:
  1. (initget 6)
  2. (setq d (getdist "\nTube Diameter <1>:   "))
  3. (or d (setq d 1))
  4. (initget 1)
  5. (setq l (getangle "\nEnd Angle:   "))
  6. (initget 6)
  7. (setq s (getint "\nNumber Of Tube Segments <16>:   "))
  8. (or s (setq s 16))
  9. (setq i (/ (* pi 2) s) ; angle increase per segment
  10.        a 0              ; start angle 0
  11.        ll nil)          ; point list nil
  12. (repeat (1+ s)
  13.     (setq ll
  14.        (cons
  15.           (list (* (cos a) d 0.5)
  16.                 (* (sin a) d 0.5)
  17.                 (* d 0.5 (sin a) (cos l)));;;HERE IS THE PROBLEM CHILD
  18.           ll)
  19.            a (+ a i)))
  20. (command "_.3DPOLY")
  21. (foreach p ll (command p))
  22. (command "")

 
可能我需要的是切线,而不是正弦。
 
180度或0度切割是不允许的,因为这会使一切崩溃
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:05:11 | 显示全部楼层
嘿,大卫,
 
试一试:
 
  1. (initget 6)
  2. (setq d (getdist "\nTube Diameter <1>:   "))
  3. (or d (setq d 1))
  4. (initget 1)
  5. (setq l (getangle "\nEnd Angle:   "))
  6. (initget 6)
  7. (setq s (getint "\nNumber Of Tube Segments <16>:   "))
  8. (or s (setq s 16))
  9. (setq i (/ (* pi 2) s) ; angle increase per segment
  10.        a 0              ; start angle 0
  11.        ll nil)          ; point list nil
  12. (repeat (1+ s)
  13.     (setq ll
  14.        (cons
  15.           (list (* (cos a) d 0.5)
  16.                 (* (sin a) d 0.5)
  17.                 (* d 0.5 (sin a) (sin l)));;;HERE IS THE PROBLEM CHILD
  18.           ll)
  19.            a (+ a i)))
  20. (command "_.3DPOLY")
  21. (foreach p ll (command p))
  22. (command "")
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 12:25:49 | 显示全部楼层
它是相切的。还是没有找到我的旧手机。
 
  1. (defun c:mitertub (/ d l r x s i a rl ll vl)
  2. (defun tan (z / cosz)
  3.   (if (zerop (setq cosz (cos z)))
  4.     9.7e307
  5.     (/ (sin z) cosz)))
  6. (initget 6)
  7. (setq d (getdist "\nTube Diameter <1>:   "))
  8. (or d (setq d 1))
  9. (initget 1)
  10. (setq l (getangle "\nLeft End Angle -89.9 to +89.9:   "))
  11. (initget 1)
  12. (setq r (getangle "\nRight End Angle -89.9 to +89.9:   "))
  13. (initget 7)
  14. (setq x (getdist "\nTube Centerline Length:   "))
  15. (initget 6)
  16. (setq s (getint "\nNumber Of Tube Segments <16>:   "))
  17. (or s (setq s 16))
  18. ;;;INITIATE ANGLE VARIABLES
  19. (setq i (/ (* pi 2) s)
  20.        a 0)
  21. ;;;RIGHT AND LEFT END LISTS
  22. (repeat (1+ s)
  23.     (setq rl (cons (trans (list (* (cos a) d 0.5)
  24.                                 (* (sin a) d 0.5)
  25.                                 (* d 0.5 (sin a) (tan r)))
  26.                            0 '(1 0 0)) rl)
  27.           ll (cons (trans (list (* (cos a) d 0.5)
  28.                                 (* (sin a) d 0.5)
  29.                                 (* d 0.5 (sin a) (tan l)))
  30.                            0 '(1 0 0)) ll)
  31.            a (+ a i)))
  32. ;;;CREATE THE MESH LIST
  33. (setq vl (list (list 0 0 0)
  34.                 (last ll)
  35.                 (list (car (last rl))
  36.                       (- (+ (cadr (last rl)) x))
  37.                       (caddr (last rl)))
  38.                 (list 0 (- x) 0)))
  39. (while ll
  40.     (setq vl (cons (list 0 0 0) vl)
  41.           vl (cons (car ll)     vl)
  42.           vl (cons (list (car (car rl))
  43.                          (- (+ (cadr (car rl)) x))
  44.                          (caddr (car rl))) vl)
  45.           vl (cons (list 0 (- x) 0) vl)
  46.           ll (cdr ll)
  47.           rl (cdr rl)))
  48. ;;;MAKE THE MESH
  49. (entmake (list (cons 0 "POLYLINE")
  50.                (cons 10 (list 0 0 0))
  51.                (cons 66 1)(cons 8 "3D")
  52.                (cons 70 16)
  53.                (cons 71 (1+ s))
  54.                (cons 72 4)))
  55. (foreach v vl
  56.    (entmake (list (cons 0 "VERTEX")(cons 8 "3D")
  57.                   (cons 10 v)
  58.                   (cons 70 64))))
  59. (entmake (list (cons 0 "SEQEND")(cons 8 "3D")))
  60. (prin1))

 
用于管状托盘轨道的斜接端-大卫
124455zgsgfjofsjogeigf.gif
124457ke6gm226qzyqhewt.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:50:44 | 显示全部楼层
不错,大卫
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 11:10 , Processed in 0.472428 second(s), 62 queries .

© 2020-2025 乐筑天下

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