老大,我还是看不出错在那里<BR> f5612140发表于2004-7-24 11:59:00static/image/common/back.gif老大,我还是看不出错在那里
<BR>看图,你说的单元弧长应该是红色部分吧,可需要的是通过这个圆弧,半径为D的部分的长度,因为D未知,这个弧长就是未知数,无法进行计算
你说的间隙是指A吧,可实际应该是兰色圆圈标识的直径为D的部分圆弧,这更是一个未知数。。。
如果你按A和红色部分来计算,结果在楼主给的图得出的结果取整可能是正确的,但如果条件改变,结果就无法预料了,至少从数学角度,它是错误的
1.只能看贴图,细看才知D的位置,谢谢指正
2.将公式D->D' pi*D'/(单元外弧长+S)=B(取整数)
3.以单元看,已知单元,D'=D+36 单元"外弧长"也为已知
1):已知阵列B,输入S -> D'->D<BR>2):输入D,S=3求B1,S=5求B2,由B1,B2取B(可能不只一个值,自取一个),<BR> 输入S->D'->D 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>现在程序计算出的直径比较理想了,但是不知道如何操作截面图形,一次将图画出,希望指点。
可考虑该单元做成block (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中自动找出最大圆弧.最小圆弧就好了,只是我不知怎么做:
在一个选集中,含有一组圆弧,找出最大半径和最小半径的圆弧。 把这些对象做成列表,然后使用vl-sort排一下序就可以了
页:
1
[2]