找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 532|回复: 5

[原创] 弓形质心

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2022-7-9 18:49:35 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2022-7-9 18:51 编辑

参考:Calculate circular segment, calculator and formulas (redcrab-software.com)

弓形质心-1.gif
Autolisp 实现
  1. (defun c:tt (/ ss e san ean r an sp ep mp pm pc a s dx p)
  2.   (princ "\n拾取 ARC ...")
  3.   (if (setq ss (ssget ":S" '((0 . "arc"))))
  4.     (progn (setq e   (ssname ss 0)
  5.                  el  (entget e)
  6.                  san (cdr (assoc 50 el))
  7.                  ean (cdr (assoc 51 el))
  8.                  r   (cdr (assoc 40 el))
  9.                  an  (if (> san ean)
  10.                        (+ ean (- (+ pi pi) san))
  11.                        (- ean san)
  12.                      )
  13.                  sp  (vlax-curve-getstartpoint e)
  14.                  ep  (vlax-curve-getendpoint e)
  15.                  mp  (mapcar '(lambda (a b) (/ (+ a b) 2)) sp ep)
  16.                  pm  (vlax-curve-getpointatparam
  17.                        e
  18.                        (/ (+ (vlax-curve-getstartparam e) (vlax-curve-getendparam e)) 2)
  19.                      )
  20.                  pc  (cdr (assoc 10 el))
  21.                  ;;a   (vlax-curve-getarea e)
  22.                  a   (* (/ (* r r) 2) (- an (sin an)))
  23.                  s   (distance sp ep)
  24.                  dx  (- (/ (expt s 3) (* 12 a)) (* r (cos (/ an 2))))
  25.                  p   (polar mp (angle mp pm) dx)
  26.            )
  27.            (vl-cmdf ".point" "_none" p)
  28.     )
  29.   )
  30.   (princ)
  31. )

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

已领礼包: 8121个

财富等级: 富甲天下

发表于 2022-7-9 19:40:14 | 显示全部楼层
在我以前的帖子里面,有纯公式求弓形的质心和面积:

  1. ;;;-------------------------------------------------------------
  2. ;;;Circular segment                                       
  3. ;;;弓的质心求以及弓形的面积                              
  4. ;;;输入: C---圆心;Center                                 
  5. ;;;      R---半径;Radius                                 
  6. ;;;      A1--起始角;0 <= A1 <= 2*Pi Start Angle(Radian)   
  7. ;;;      A2--终止角;0 <= A2 <= 2*Pi End Angle(Radian)     
  8. ;;;      IsCW--是否顺时针                                 
  9. ;;;输出: 列表: 第一项为质心,第二项为面积,第三项为弧长   
  10. ;;;-------------------------------------------------------------
  11. (defun CIR:Circular_Segment (C R A1 A2 IsCW / A k d S e)
  12.   (and isCW (setq A A2 A2 A1 A1 A))
  13.   (if (> A1 A2)
  14.     (setq A (- (+ pi pi A2) A1 ))
  15.     (setq A (- A2 A1))
  16.   )
  17.   (setq k (sin (* 0.5 A)))
  18.   (setq k (* 1.333333333333333333333 R k k k))
  19.   (setq e (- A (sin A)))
  20.   (setq S (* 0.5 R R e))
  21.   (and IsCW (setq S (- S)))                               ;如果顺时针,面积为负
  22.   (setq d (/ k e))
  23.   (if (> A1 A2) (setq d (- d)))                           ;这种情况下要反向
  24.   (list (polar C (* 0.5 (+ A1 A2)) d) S (* A R))
  25. )


还有扇形的质心,面积等。
  1. ;;;-------------------------------------------------------------
  2. ;;;Circular sector                                       
  3. ;;;扇形的质心,面积和周长                                 
  4. ;;;输入: C---圆心;Center                                 
  5. ;;;      R---半径;Radius                                 
  6. ;;;      A1--起始角;0 <= A1 <= 2*Pi Start Angle(Radian)   
  7. ;;;      A2--终止角;0 <= A2 <= 2*Pi End Angle(Radian)     
  8. ;;;      IsCW--是否顺时针                                 
  9. ;;;输出: 列表: 第一项为质心,第二项为面积,第三项为周长   
  10. ;;;-------------------------------------------------------------
  11. (defun CIR:Circular_Sector (C R A1 A2 IsCW / A d S L)
  12.   (and IsCW (setq A A2 A2 A1 A1 A))
  13.   (if (> A1 A2)
  14.     (setq A (- (+ pi pi A2) A1))
  15.     (setq A (- A2 A1))
  16.   )
  17.   (setq d (/ (* 4 R (sin (* 0.5 A))) 3 A))
  18.   (setq S (* 0.5 A R R))                                
  19.   (and IsCW (setq S (- S)))                               ;如果顺时针,面积为负
  20.   (setq L (* R (+ A 2)))                                  ;周长
  21.   (if (> A1 A2) (setq d (- d)))                           ;这种情况下要反向
  22.   (list (polar C (* 0.5 (+ A1 A2)) d) S L)
  23. )

点评

厉害 感谢大佬的代码  详情 回复 发表于 2022-7-12 08:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2022-7-9 19:46:28 | 显示全部楼层
本帖最后由 st788796 于 2022-7-9 19:48 编辑
Highflybird 发表于 2022-7-9 19:40
在我以前的帖子里面,有纯公式求弓形的质心和面积:

扇形是三角形和弓形组合

三角形质心

  1. (defun triangle-centroid (p1 p2 p3) (mapcar '(lambda (a b c) (/ (+ a b c) 3)) p1 p2 p3))

扇形质心,用弓形和三角形质心组合: 两个质心连线,按面积分隔。
推广:LWPOLYLINE在质心算法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 588个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 244个

财富等级: 日进斗金

发表于 2022-7-12 08:04:50 | 显示全部楼层
Highflybird 发表于 2022-7-9 19:40
在我以前的帖子里面,有纯公式求弓形的质心和面积:

厉害 感谢大佬的代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 09:47 , Processed in 0.200715 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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