明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3123|回复: 12

[源码] [原创]有关圆弧、凸度、半径、弧长、角度、圆心的各种函数

  [复制链接]
发表于 2021-6-28 11:29:11 | 显示全部楼层 |阅读模式
本帖最后由 yjtdkj 于 2021-7-6 15:54 编辑

求圆弧凸度的函数(可判断正负)
关于凸度的正负号问题,由于所有的圆弧都是逆时针画的,所以圆弧的凸度全部是正的,只有多段线中的圆弧才有正负。
我的程序可以判断正负。
  1. (defun c:tt ()
  2.   (progn
  3.   (defun dxf (key ename) (cdr (assoc key (entget ename))))
  4.   (defun mid (p1 p2)
  5.       (mapcar (function (lambda (e1 e2) (* (+ e1 e2) 0.5))) p1 p2)
  6.     )
  7.     )
  8.   (setq en (car (entsel)))
  9.   (setq  
  10.   r     (dxf 40 en)
  11.   pt1   (vlax-curve-getstartPoint en)
  12.   pt2   (vlax-curve-getEndPoint en)
  13.   ptm   (mid pt1 pt2)
  14.   len   (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en))
  15.   cpm   (vlax-curve-getpointAtdist en (/ len 2))
  16.   dis   (distance pt1 pt2)   
  17.   h     (distance ptm cpm)
  18.   )
  19.   (setq tu (/ h (* dis 0.5)))
  20.   (setq
  21.     a (-(cadr pt2) (cadr pt1))
  22.     b (-(car pt1)(car pt2))
  23.     c (-(* -1 a (car pt1))(* b (cadr pt1)))
  24.     d1 (-(* -1 a (car cpm))(* b (cadr cpm)))
  25.   )
  26.   (cond
  27.     ((= d1 c)
  28.       (* tu 0)
  29.   )
  30.   ((> d1 c)
  31.       (* tu -1)
  32.   )
  33.   ((< d1 c)
  34.       (* tu 1)
  35.   )
  36. )
  37. )




评分

参与人数 2明经币 +2 收起 理由
lee50310 + 1 很给力!
USER2128 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-7-6 15:55:49 | 显示全部楼层
  1. ;;;
  2. ;;; 已知弦长,半径,求角度
  3.     (defun yj-ChordRadius2Angle        (cho rad / ANG H-R)
  4.       (setq h-r (sqrt (- (* rad rad) (* (* 0.5 cho) (* 0.5 cho)))))
  5.       (setq ang (* (atan (/ (* 0.5 cho) h-r)) 2))
  6.     )

点评

需要加一个判断 ;; 已知弦长,半径,求圆心角 (defun yj-ChordRadius2Angle (cho rad / a b) (setq b (* cho 0.5)) (if (>= (setq a (- (* rad rad) (* b b))) 0) (* (atan (/ b (sqrt a))) 2) )   发表于 2022-3-4 09:10
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2021-7-5 09:16:01 | 显示全部楼层
我再编一个LEE-MAC的反函数,通过两点和圆心点,求凸度
  1. ;; Centre to Bulge   -  yjtdkj.2021.07.04
  2. ;; p1 - start vertex
  3. ;; p2 - end vertex
  4. ;; cen  - Centre point
  5. ;; Returns the bulge of the arc described by the given centre and vertices
  6. (defun yj-centre2bulge (p1 p2 cen)
  7.   (setq        dis (distance p1 p2)
  8.         r   (distance p1 cen)
  9.         mid (mapcar (function (lambda (e1 e2) (* (+ e1 e2) 0.5))) p1 p2)
  10.         s   (/ dis 2)
  11.         h   (- r (distance mid cen))
  12.         amid (polar mid (angle cen mid) h)
  13.   )
  14.   (setq bul (/ h s))
  15.   (setq
  16.           a (-(cadr p2) (cadr p1))
  17.           b (-(car p1)(car p2))
  18.           c (-(* -1 a (car p1))(* b (cadr p1)))
  19.           d1 (-(* -1 a (car amid))(* b (cadr amid)))
  20.   )
  21.   (cond
  22.           ((= d1 c)
  23.                   (* bul 0)
  24.   )
  25.   ((> d1 c)
  26.                   (* bul -1)
  27.   )
  28.   ((< d1 c)
  29.                   (* bul 1)
  30.   )
  31. )
  32. )
 楼主| 发表于 2021-7-5 09:12:51 | 显示全部楼层
本帖最后由 yjtdkj 于 2021-7-5 09:14 编辑

LEE-MAC函数:通过两点和凸度,求圆心点
  1. ;; Bulge Centre  -  Lee Mac
  2. ;; p1 - start vertex
  3. ;; p2 - end vertex
  4. ;; b  - bulge
  5. ;; Returns the centre of the arc described by the given bulge and vertices

  6. (defun LM:bulgecentre (p1 p2 b)
  7.   (polar p1
  8.          (+ (angle p1 p2) (- (/ pi 2) (* 2 (atan b))))
  9.          (/ (* (distance p1 p2) (1+ (* b b))) 4 b)
  10.   )
  11. )
 楼主| 发表于 2021-7-6 15:55:29 | 显示全部楼层
  1.    ;;;
  2. ;;; 已知弦长,半径,求弧长
  3.     (defun yj-ChordRadius2ArcLength (cho rad / alen ang h h-r)
  4.       (setq h-r (sqrt (- (* rad rad) (* (* 0.5 cho) (* 0.5 cho)))))
  5.       (setq h (- rad h-r))
  6.       (setq alen  (* (atan (/ (sqrt (- (* 2.0 rad h) (* h h))) (- rad h))) rad 2))
  7.     )
发表于 2021-7-6 16:03:08 | 显示全部楼层
GetBulge vba中有个函数可以直接求凸度
发表于 2021-7-26 09:57:53 | 显示全部楼层
yjtdkj 发表于 2021-7-5 09:16
我再编一个LEE-MAC的反函数,通过两点和圆心点,求凸度

怎么判定优弧劣弧
 楼主| 发表于 2021-7-26 12:10:57 | 显示全部楼层
xtjd 发表于 2021-7-26 09:57
怎么判定优弧劣弧

什么是优弧?劣弧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:58 , Processed in 0.155534 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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