明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2824|回复: 13

[函数] 三点画圆弧

[复制链接]
发表于 2015-8-8 00:03:14 | 显示全部楼层 |阅读模式
利用高飞鸟大师的求外心的程序,做了一个三点画圆弧的

  (defun drarc3pt(pt1 pt2 pt3)
    (setq gfret(cir:ppp pt1 pt2 pt3)
          cent(car gfret)
          ang1 (angle cent pt1)
          ang2(angle cent pt3)
          )
    (setq xzfx(clockw pt1 pt2 pt3))
    (cond ((= xzfx 1)
           (entmake (list (cons 0  "ARC")
                   (cons 10 cent)
                   (cons 40 (cadr gfret))
                   (cons 50 ang1) (cons 51 ang2))))
          ((= xzfx -1)
           (entmake (list (cons 0  "ARC")
                   (cons 10 cent)
                   (cons 40 (cadr gfret))
                   (cons 50 ang2) (cons 51 ang1))))
          ((= xzfx 0)
           (princ "出错:三点共线")))
    )

(defun clockw(pt1 pt2 pt3);;;;判断三点的旋转方向
    (setq keyjd(-(*(- (car pt2) (car pt1))(-(cadr pt3)(cadr pt2)))
                 (*(-(cadr pt2)(cadr pt1))(- (car pt3) (car pt2)))))
    (cond ((> keyjd 0)(setq clock 1))
          ((< keyjd 0)(setq clock -1))
          ((= keyjd 0)(setq clock 0)))
    clock)

(defun CIR:PPP (P0 P1 P2 / X0 Y0 X1 Y1 X2 Y2 DX1 DY1 DX2 DY2 D 2D C1 C2 CE);;;;三角形外心--来自高飞鸟
  (setq        X0  (car  P0)
        Y0  (cadr P0)
        X1  (car  P1)
        Y1  (cadr P1)
        X2  (car  P2)
        Y2  (cadr P2)
        DX1 (- X1 X0)
        DY1 (- Y1 Y0)
        DX2 (- X2 X0)
        DY2 (- Y2 Y0)
  )
  (setq D (- (* DX1 DY2) (* DX2 DY1)))
  (if (equal D 0 1e-14)
    nil
    (progn
      (setq 2D (+ D D)
            C1 (+ (* DX1 (+ X0 X1)) (* DY1 (+ Y0 Y1)))
            C2 (+ (* DX2 (+ X0 X2)) (* DY2 (+ Y0 Y2)))
            CE (List (/ (- (* C1 DY2) (* C2 DY1)) 2D)
                     (/ (- (* C2 DX1) (* C1 DX2)) 2D)
               )
      )
      (list CE (distance CE P0))
    )
  )
)


评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1

查看全部评分

"觉得好,就打赏"
    共1人打赏
发表于 2016-9-24 23:19:54 | 显示全部楼层
(defun make-arc(p1 p2 p3 / cn lm:clockwise-p lst m1 m2)
        ;; Clockwise-p  -  Lee Mac
        ;; Returns T if p1,p2,p3 are clockwise oriented
        (defun LM:Clockwise-p ( p1 p2 p3 )
    (< (* (- (car  p2) (car  p1)) (- (cadr p3) (cadr p1)))
                        (* (- (cadr p2) (cadr p1)) (- (car  p3) (car  p1)))
    )
        )
        (setq
                p1(trans p1 1 0)
                p2(trans p2 1 0)
                p3(trans p3 1 0)
                m1 (mid p1 p2)
                m2 (mid p2 p3)
        )
        (if(setq cn
                         (inters
                                 m1 (polar m1 (+ (angle p1 p2) (/ pi 2.)) 1.0)
                                 m2 (polar m2 (+ (angle p2 p3) (/ pi 2.)) 1.0)
                                 nil
                         )
                 )
                (progn
                        (setq lst(append (list cn)
                                                                 (if (LM:Clockwise-p p1 p2 p3)
                                                                         (list (angle cn p3) (angle cn p1))
                                                                         (list (angle cn p1) (angle cn p3))
                                                                 )
                                                                 (list (distance cn p1))
                                                         )
                        )
                        (entmake (append '((0 . "ARC")) (mapcar 'cons '(10 50 51 40) lst)))
                )               
        )
)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-22 12:19:31 | 显示全部楼层
自贡黄明儒 发表于 2016-9-22 08:36
输入units,有一个时针方向,不知道影响画弧方向否?

应该是不影响的,程序里面用的是向量叉乘法来确定顺逆时针
发表于 2016-9-22 01:45:23 | 显示全部楼层
这个程序很好。
发表于 2016-9-22 03:03:36 | 显示全部楼层
好算法。好,好,好。
发表于 2016-9-22 08:36:16 | 显示全部楼层
输入units,有一个时针方向,不知道影响画弧方向否?
 楼主| 发表于 2016-9-22 12:21:55 | 显示全部楼层
前生 发表于 2016-9-22 03:03
好算法。好,好,好。

谢谢支持
 楼主| 发表于 2016-9-22 12:35:31 | 显示全部楼层
前生 发表于 2016-9-22 03:03
好算法。好,好,好。

谢谢滋磁!
发表于 2016-9-22 21:21:34 | 显示全部楼层
这个算法不错。一直不想使用Command "arc" p1 p2 p3.个人感觉,能用entmake生成就用entmake生成。
发表于 2016-9-22 21:23:56 | 显示全部楼层

你是做什么方面的,我是做冲压模具的。
 楼主| 发表于 2016-9-23 13:07:07 | 显示全部楼层
前生 发表于 2016-9-22 21:23
你是做什么方面的,我是做冲压模具的。

我是建筑结构的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 22:56 , Processed in 0.198928 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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