liyanchao1 发表于 2004-2-25 08:56:00

请问,这段绘制动态函数曲线的程序错在那里?请帮助改正

请问各位高手,我用VBA编了一段利用多段线绘制从固定点(x1,y1,z1) 到当前鼠标位置的动态函数曲线------y=k*(x-x1)^2+y1 的程序,可是却无法执行,请问错在那里?多谢指教!


****************************


Sub pl()<BR>Dim p1(0 To 2) As Double<BR>Dim p2 As Variant<BR>Dim pntobj As Variant


Dim lobj As AcadLWPolyline<BR>Dim vers(0 To 2000) As Double


Dim k As Double<BR>Dim g As Double<BR>Dim b As Double


Dim x1 As Double<BR>Dim y1 As Double<BR>Dim x As Double<BR>Dim y As Double<BR>Dim i As Double<BR>Dim a As Double


Dim l As Double<BR>Dim m As Double<BR>Dim n As Double


g = 32.7718 / 1000<BR>b = 68.5036<BR>k = g / (2 * b)


<BR>l = 100<BR>m = 100<BR>n = 0<BR>p1(0) = l<BR>p1(1) = m<BR>p1(2) = n


p2 = ThisDrawing.Utility.GetPoint(, "p2")<BR>x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k(l - p2(0)))<BR>y1 = m - k * (l - x1) ^ 2


vers(0) = l<BR>vers(1) = m


<BR>i = l<BR>a = 2


If i &lt;= p(0) Then<BR>       While i &lt;= p2(0)<BR>       x = p1(0) + i<BR>       y = k * ((x - x1) * 10) ^ 2 + y1<BR>       i = i + 0.5<BR>       vers(a) = x<BR>       vers(a + 1) = y<BR>       a = a + 2<BR>       Wend<BR>Else<BR>       x = p1(0) + i<BR>       y = k * ((x - x1) * 10) ^ 2 + y1<BR>       i = i - 0.5<BR>       vers(a) = x<BR>       vers(a + 1) = y<BR>       a = a + 2<BR>       Wend<BR>vers(a) = p2(0)<BR>vers(a + 1) = p2(1)<BR>Set lobj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vers)


End Sub


*************************

topirol 发表于 2004-2-25 09:04:00

1、x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k(l - p2(0)))是不是改成


x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k*(l - p2(0)))


       


2、If i &lt;= p(0) Then


是什么意思?p(0)是什么?

liyanchao1 发表于 2004-2-25 09:21:00

对不起,刚才传输错误。“If       i &lt;= p(0) then ”应为 “ if i&lt;= p1(0) then ”,我进行调试时,总是提示“编译错误:缺少数组”。请大侠多多指教!不胜感谢!

topirol 发表于 2004-2-25 12:04:00

"缺少数组"是


x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k(l - p2(0)))的原因


改成





x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k * (l - p2(0)))


       


后面还有很多问题,不知道你的意图是什么

liyanchao1 发表于 2004-2-25 14:27:00

大侠,我把上述问题该了以后,程序执行后还是没有任何显示。请帮助修改下列程序,或者帮助重新编写一段程序。多多有劳!


Sub pl()                                                                                                                                                                                                                                                                                                                       '绘制抛物线:y=k*(x-x1)^2+y1'<BR>Dim p1(0 To 2) As Double<BR>Dim p2 As Variant<BR>Dim pntobj As Variant


Dim lobj As AcadLWPolyline<BR>Dim vers(0 To 2000) As Double


Dim k As Double<BR>Dim g As Double<BR>Dim b As Double


Dim x1 As Double<BR>Dim y1 As Double<BR>Dim x As Double<BR>Dim y As Double<BR>Dim i As Double<BR>Dim a As Double


Dim l As Double<BR>Dim m As Double<BR>Dim n As Double<BR>Dim O As Double<BR>Dim P As Double<BR>Dim Q As Double


'确定函数曲线的参数K的值


g = 32.7718 / 1000<BR>b = 68.5036<BR>k = g / (2 * b)


'确定函数曲线的第一点的坐标<BR>l = 100<BR>m = 100<BR>n = 0<BR>p1(0) = l<BR>p1(1) = m<BR>p1(2) = n


'提取当前鼠标的动态坐标<BR>p2 = ThisDrawing.Utility.GetPoint(, "p2")<BR>O = p2(0)<BR>P = p2(1)<BR>Q = p2(2)


'计算曲线函数参数X1、Y1的值<BR>x1 = (P - m + k * l ^ 2 - k * O ^ 2) / (2 * k * (l - O))<BR>y1 = m - k * (l - x1) ^ 2


'确定函数曲线的第一点<BR>vers(0) = l<BR>vers(1) = m


i = l<BR>a = 2


'利用循环确定函数曲线上的端点之间的若干坐标值<BR>If i &lt;= p1(0) Then<BR>       While i &lt;= p1(0)<BR>       x = p1(0) + i<BR>       y = k * ((x - x1) * 10) ^ 2 + y1<BR>       i = i + 0.5<BR>       vers(a) = x<BR>       vers(a + 1) = y<BR>       a = a + 2<BR>       Wend<BR>Else<BR>       While i &gt; p1(0)<BR>       x = p1(0) - i<BR>       y = k * ((x - x1) * 10) ^ 2 + y1<BR>       i = i - 0.5<BR>       vers(a) = x<BR>       vers(a + 1) = y<BR>       a = a + 2<BR>       Wend<BR>End If


'确定函数曲线的最后一点<BR>vers(a) = p2(0)<BR>vers(a + 1) = p2(1)


'利用多义线绘制动态函数曲线<BR>Set lobj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vers)


End Sub

topirol 发表于 2004-2-25 16:42:00

是不是在两点中间画抛物线呢?在(中间插几个点呢?或者是由间隔距离来控制?)

liyanchao1 发表于 2004-2-25 18:26:00

在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程?

ahlzl 发表于 2004-2-25 22:12:00

liyanchao1发表于2004-2-25 18:26:00static/image/common/back.gif在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程?

<BR>抛物线的编程不难,关键是你表达不清楚!过两点是不能确定唯一的抛物线的,"中间点的选取由间隔距离来控制!"是什么意思?!

liyanchao1 发表于 2004-2-26 08:56:00

在要绘制的抛物线: y=k*(x-x1)^2+y1 中,已知曲线上的一个固定点的坐标、和参数k的值,要绘制一条同时通过当前活动鼠标的动态坐标点的动态抛物线。中间的点的坐标的选取由循环语句控制:按x坐标每增加或减少i值进行取点。关键是如何获得活动鼠标的动态坐标值;请问各位大侠,下面这段程序能否获得鼠标的动态坐标值,使得绘制的抛物线随着鼠标的移动而动态变化?那位大侠能否帮助编一个获得活动鼠标的动态坐标值的程序?


'提取当前鼠标的动态坐标<BR>p2 = ThisDrawing.Utility.GetPoint(, "p2")<BR>O = p2(0)<BR>P = p2(1)<BR>Q = p2(2)

topirol 发表于 2004-2-26 12:19:00

跟“橡皮条”一样吗?以前有人讨论过,但不知道有没有结果,好像很复杂的……
页: [1] 2
查看完整版本: 请问,这段绘制动态函数曲线的程序错在那里?请帮助改正