请问,这段绘制动态函数曲线的程序错在那里?请帮助改正
请问各位高手,我用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 <= p(0) Then<BR> While i <= 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
************************* 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 <= p(0) Then
是什么意思?p(0)是什么? 对不起,刚才传输错误。“If i <= p(0) then ”应为 “ if i<= p1(0) then ”,我进行调试时,总是提示“编译错误:缺少数组”。请大侠多多指教!不胜感谢! "缺少数组"是
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)))
后面还有很多问题,不知道你的意图是什么 大侠,我把上述问题该了以后,程序执行后还是没有任何显示。请帮助修改下列程序,或者帮助重新编写一段程序。多多有劳!
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 <= p1(0) Then<BR> While i <= 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 > 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 是不是在两点中间画抛物线呢?在(中间插几个点呢?或者是由间隔距离来控制?) 在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程? liyanchao1发表于2004-2-25 18:26:00static/image/common/back.gif在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程?
<BR>抛物线的编程不难,关键是你表达不清楚!过两点是不能确定唯一的抛物线的,"中间点的选取由间隔距离来控制!"是什么意思?! 在要绘制的抛物线: 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) 跟“橡皮条”一样吗?以前有人讨论过,但不知道有没有结果,好像很复杂的……
页:
[1]
2