btlelite 发表于 2004-5-27 03:02:00

为什么两个圆弧不能重合呢?

该程序画的是蜗壳内壁型线,奇怪的是,第2条圆弧终点和第3条的起点始终不能重合,百思不得其解,所以来这向高人求助,望各位大大帮帮忙


谢谢了


(defun c:woke()<BR>       (progn<BR>       <BR>       ;输入数据


        (setq p0 (getpoint "\n 请输入基准点:"))<BR>       (setq s (getreal "\n 绘图比例&lt;默认值 0.1&gt;:"))<BR>        (if (null s) (setq s 0.1))<BR>        (setq r (getreal "\n 请输入进口半径R&lt;默认值750&gt;:"))<BR>        (if (null r) (setq r 750))<BR>        (setq r1 (getreal "\n 请蜗壳输入半径R1&lt;默认值818&gt;:"))<BR>        (if (null r1) (setq r1 818))<BR>        (setq r2 (getreal "\n 请输入蜗壳半径R2&lt;默认值954&gt;:"))<BR>        (if (null r2) (setq r2 954))<BR>        (setq r3 (getreal "\n 请输入蜗壳半径R3&lt;默认值1090&gt;:"))<BR>        (if (null r3) (setq r3 1090))<BR>        (setq r4 (getreal "\n 请输入蜗壳半径R4&lt;默认值1226&gt;:"))<BR>        (if (null r4) (setq r4 1226))<BR>       (setq c (getreal "\n 蜗壳出口长度C&lt;默认值760&gt;:"))<BR>        (if (null c) (setq c 760))<BR>        (setq l (getreal "\n 请输入蜗壳内壁间距L&lt;默认值544&gt;:"))<BR>        (if (null l) (setq l 544))<BR>        (setq a (/ l 4))<BR>        <BR>        (setq px (car p0)<BR>                                               py (cadr p0)<BR>                                               pz (caddr p0))<BR>;定义等边基点坐标<BR>(setq xa1 (+ px (/ a 2))<BR>                                       ya1 (+ py (/ a 2))<BR>                                       xa2 xa1<BR>                                       ya2 (- py (/ a 2))<BR>                                       xa3 (- px (/ a 2))<BR>                                       )<BR>                                       (setq ya3 ya2)<BR>                                       (setq xa4 xa3)<BR>                                       (setq ya4 ya1)<BR>                                       ;蜗壳个弧线端点坐标<BR>                               (setq xb1 (+ px (+ r (- l c))))<BR>        (setq yb1 (+ py (+ (sqrt (- (* r1 r1) (* (+ (+ r (- l c)) (/ a 2)) (+ (+ r (- l c)) (/ a 2))))) (/ a 2))))<BR>                               (setq xb2 px)<BR>        <BR>                               (setq yb2 (+ py (+ (sqrt (- (* r1 r1) (* (/ a 2) (/ a 2)))) (/ a 2))))<BR>                               (setq xb3 (- px (sqrt (- (* r2 r2) (* (/ a 2) (/ a 2))))))<BR>                               (setq yb3 py)<BR>                               (setq xb4 px)<BR>                               (setq yb4 (- py (sqrt (- (* r3 r3) (* (/ a 2) (/ a 2))))))<BR>                               (setq xb5 (+ px (+ r l)))<BR>                               (setq yb5 py )<BR>                               (setq xc1 xb1);(+ (- (+ px (sqrt (- (* r4 r4) (* (/ a 2) (/ a 2))))) c) (/ a 2))<BR>                               (setq yc1 (+ py r4))<BR>                               (setq xc2       xb5);(+ (+ px (sqrt (- (* r4 r4) (* (/ a 2) (/ a 2))))) (/ a 2)))<BR>                               (setq yc2 yc1)<BR>                                       <BR>        (setq a1 (list xa1 ya1 pz)<BR>                                               a2 (list xa2 ya2 pz)<BR>                                               a3 (list xa3 ya3 pz)<BR>                                               a4 (list xa4 ya4 pz)<BR>                                               b1 (list xb1 yb1 pz)<BR>                                               b2 (list xb2 yb2 pz)<BR>                                               b3 (list xb3 yb3 pz)<BR>                                               b4 (list xb4 yb4 pz)<BR>                                               b5 (list xb5 yb5 pz)<BR>                                               c1 (list xc1 yc1 pz)<BR>                                               c2 (list xc2 yc2 pz))<BR>                                               (command "arc" b1 "c" a4 b2 "")<BR>                                               (command "arc" b2 "c" a3 b3 "")<BR>                                                               (command "arc" b3 "c" a2 b4 "")<BR>               (command "arc" b4 "c" a1 b5 "")<BR>               (command "line" a1 a2 ""<BR>                                                                                                                               "line" a2 a3 ""<BR>                       "line" a3 a4 ""<BR>                "line" a4 a1 ""<BR>                "line" c1 b1 ""<BR>                "line" c1 c2 ""<BR>                                                                                                                       "line" c2 b5 ""<BR>                "circle" p0 r<BR>                )<BR>        <BR>        <BR>        <BR>        ))

meflying 发表于 2004-5-27 07:52:00

可能是你的计算问题,你用起点、中心点、终点的画法不一定按你要求画的,起点和中心点选择后,终点的位置就限制在了这个圆上,你计算出的点如果不是这样,就回导致这种结果

gare1000 发表于 2004-5-27 09:01:00

两位也太厉害了,夜里还在战斗吗?


<A name=21687><FONT color=#000066><B>btlelite</B></FONT></A>                               2004-5-27 3:02:43


<A name=21700><FONT color=#000066><B>meflying</B></FONT></A>       2004-5-27 7:52:30

xhf 发表于 2004-5-27 09:43:00

在程序前面部分关闭捕捉模式试试看。


(setq os (getvar "osmode"))


(setvar "osmode" 0)


......


(setvar "osmode" os)

meflying 发表于 2004-5-27 11:04:00

gare1000发表于2004-5-27 9:01:00static/image/common/back.gif两位也太厉害了,夜里还在战斗吗?



btlelite                               2004-5-27 3:02:43


快8点了,还算夜里?你新疆的吗?

btlelite 发表于 2004-5-27 13:00:00

计算没有问题,也和计算无关,因为上一个弧的终点就是下一个弧的起点;


                               不知道会不会和捕捉有关,我试试


                               谢谢指导

meflying 发表于 2004-5-27 13:11:00

点是没错,可你这样的圆弧是不存在的,起点确定,圆心确定,终点不是随便哪儿都可以的,你可以用手在你的图上画画,起点,终点都按你的给定点,看圆心能不能到你要求的地方

btlelite 发表于 2004-5-27 13:31:00

哦,对啊,有道理,我再检查一下

btlelite 发表于 2004-5-27 13:42:00

确实是设计本身误差造成的,看来得换方法了.


我想如果追求圆弧能接合到一起,用 起点,终点半径应该可以解决,但是出现了一个新的问题,画不出来啊,也不知道是什么原因,请问一下,用这三个参数应该怎么画呢?

btlelite 发表于 2004-5-27 13:56:00

我想让它们的点重合,圆心位置另外做修正,我应该怎么做呢


不是我不愿意动脑筋,我是个初学者,想不出好点子了
页: [1] 2
查看完整版本: 为什么两个圆弧不能重合呢?