f5612140 发表于 2004-7-24 11:59:00

meflying发表于2004-7-24 10:13:00static/image/common/back.gif这个计算肯定是错误的...

老大,我还是看不出错在那里<BR>

meflying 发表于 2004-7-24 14:25:00

f5612140发表于2004-7-24 11:59:00static/image/common/back.gif老大,我还是看不出错在那里


<BR>看图,你说的单元弧长应该是红色部分吧,可需要的是通过这个圆弧,半径为D的部分的长度,因为D未知,这个弧长就是未知数,无法进行计算


你说的间隙是指A吧,可实际应该是兰色圆圈标识的直径为D的部分圆弧,这更是一个未知数。。。


如果你按A和红色部分来计算,结果在楼主给的图得出的结果取整可能是正确的,但如果条件改变,结果就无法预料了,至少从数学角度,它是错误的

f5612140 发表于 2004-7-26 08:57:00

1.只能看贴图,细看才知D的位置,谢谢指正


2.将公式D-&gt;D'               pi*D'/(单元外弧长+S)=B(取整数)


3.以单元看,已知单元,D'=D+36       单元"外弧长"也为已知


1):已知阵列B,输入S -&gt; D'-&gt;D<BR>2):输入D,S=3求B1,S=5求B2,由B1,B2取B(可能不只一个值,自取一个),<BR>               输入S-&gt;D'-&gt;D

小妹丁 发表于 2004-7-29 15:22:00

defun c:shg ()<BR>       (setq os (getvar "osmode"))<BR>       (setq cm (getvar "cmdecho"))<BR>       (setvar "cmdecho" 0)<BR>       (setvar "osmode" 0)<BR>       (shg1)<BR>       (setvar "cmdecho" cm)<BR>       (setvar "osmode" os)<BR>)<BR>(defun shg1 ()<BR>       (setq end (car (entsel "\n最大圆弧:")))<BR>       (setq enddata (entget end))<BR>       (command "lengthen" end "")<BR>       (setq hu (getvar "perimeter"))<BR>       (setq rd (cdr (assoc 40 enddata)))<BR>       (setq pdcen (cdr (assoc 10 enddata)))<BR>       (setq pdtemp (polar pdcen (* 0.5 pi) rd))<BR>       (setq enx (car (entsel "\n最小圆弧:")))<BR>       (setq enxdata (entget enx))<BR>       (setq rx (cdr (assoc 40 enxdata)))<BR>       (setq pxcen (cdr (assoc 10 enxdata)))<BR>       (setq px1 (polar pxcen (cdr (assoc 50 enxdata)) rx))<BR>       (shg2)<BR>)<BR>(defun shg2 ()<BR>       (setq bb (getint "\n阵列数:"))<BR>       (setq rr (fix (/ (* (+ hu 3.5) bb) (+ pi pi))))<BR>       (setq pxx (polar pdtemp (* 1.5 pi) rr))<BR>       (setq dd (fix (distance pxx px1)))<BR>        )<BR>现在程序计算出的直径比较理想了,但是不知道如何操作截面图形,一次将图画出,希望指点。


f5612140 发表于 2004-7-29 15:41:00

可考虑该单元做成block

小妹丁 发表于 2004-8-2 16:41:00

(defun c:shg ()<BR>       (setq os (getvar "osmode"))<BR>       (setq cm (getvar "cmdecho"))<BR>       (setvar "cmdecho" 0)<BR>       (setvar "osmode" 0)<BR>       (shg1)<BR>       (setvar "cmdecho" cm)<BR>       (setvar "osmode" os)<BR>)<BR>(defun shg1 ()<BR>       (setq end (car (entsel "\n最大圆弧:")))<BR>       (setq enddata (entget end))<BR>       (command "lengthen" end "")<BR>       (setq hu (getvar "perimeter"))<BR>       (setq rd (cdr (assoc 40 enddata)))<BR>       (setq pdcen (cdr (assoc 10 enddata)))<BR>       (setq pdtemp (polar pdcen (* 0.5 pi) rd))<BR>       (setq enx (car (entsel "\n最小圆弧:")))<BR>       (setq enxdata (entget enx))<BR>       (setq rx (cdr (assoc 40 enxdata)))<BR>       (setq pxcen (cdr (assoc 10 enxdata)))<BR>       (setq pxtemp (polar pxcen (* 0.5 pi) rx))<BR>       (setq px1 (polar pxcen (cdr (assoc 50 enxdata)) rx))<BR>       (setq px2 (polar pxcen (cdr (assoc 51 enxdata)) rx))<BR>       (shg2)<BR>)<BR>(defun shg2 ()<BR>       (setq bb (getint "\n阵列数:"))<BR>       (setq rr (fix (/ (* (+ hu 3.5) bb) (+ pi pi))))<BR>       (setq pxx (polar pdtemp (* 1.5 pi) rr))<BR>       (setq dd (fix (distance pxx px1)))<BR>       (command "arc" px1 "e" px2 "r" dd "")<BR>       (setq hux (entlast))<BR>       (setq px (cdr (assoc 10 (entget hux))))<BR>       (command "circle" px dd "")<BR>       (command "erase" hux "")<BR>       (setq bbk (ssget))<BR>       (command "array" bbk px "" "p" px       bb "" "")<BR>       <BR>)


这样子,可以操作图形阵列。


       (setq bbk (ssget))<BR>如果能在BBK中自动找出最大圆弧.最小圆弧就好了,只是我不知怎么做:


在一个选集中,含有一组圆弧,找出最大半径和最小半径的圆弧。

meflying 发表于 2004-8-2 17:58:00

把这些对象做成列表,然后使用vl-sort排一下序就可以了
页: 1 [2]
查看完整版本: 想要一个这样子的程序