明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3088|回复: 11

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

  [复制链接]
发表于 2004-2-25 08:56:00 | 显示全部楼层 |阅读模式
请问各位高手,我用VBA编了一段利用多段线绘制从固定点(x1,y1,z1) 到当前鼠标位置的动态函数曲线------y=k*(x-x1)^2+y1 的程序,可是却无法执行,请问错在那里?多谢指教! **************************** Sub pl()
Dim p1(0 To 2) As Double
Dim p2 As Variant
Dim pntobj As Variant Dim lobj As AcadLWPolyline
Dim vers(0 To 2000) As Double Dim k As Double
Dim g As Double
Dim b As Double Dim x1 As Double
Dim y1 As Double
Dim x As Double
Dim y As Double
Dim i As Double
Dim a As Double Dim l As Double
Dim m As Double
Dim n As Double g = 32.7718 / 1000
b = 68.5036
k = g / (2 * b)
l = 100
m = 100
n = 0
p1(0) = l
p1(1) = m
p1(2) = n p2 = ThisDrawing.Utility.GetPoint(, "p2")
x1 = (p2(1) - m + k * l ^ 2 - k * p2(0) ^ 2) / (2 * k(l - p2(0)))
y1 = m - k * (l - x1) ^ 2 vers(0) = l
vers(1) = m
i = l
a = 2 If i <= p(0) Then
While i <= p2(0)
x = p1(0) + i
y = k * ((x - x1) * 10) ^ 2 + y1
i = i + 0.5
vers(a) = x
vers(a + 1) = y
a = a + 2
Wend
Else
x = p1(0) + i
y = k * ((x - x1) * 10) ^ 2 + y1
i = i - 0.5
vers(a) = x
vers(a + 1) = y
a = a + 2
Wend
vers(a) = p2(0)
vers(a + 1) = p2(1)
Set lobj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vers) End Sub *************************
发表于 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)是什么?
 楼主| 发表于 2004-2-25 09:21:00 | 显示全部楼层
对不起,刚才传输错误。“If         i &lt;= p(0) then ”应为 “ if i&lt;= p1(0) then ”,我进行调试时,总是提示“编译错误:缺少数组”。请大侠多多指教!不胜感谢!
发表于 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)))


       


后面还有很多问题,不知道你的意图是什么
 楼主| 发表于 2004-2-25 14:27:00 | 显示全部楼层
大侠,我把上述问题该了以后,程序执行后还是没有任何显示。请帮助修改下列程序,或者帮助重新编写一段程序。多多有劳! Sub pl() '绘制抛物线:y=k*(x-x1)^2+y1'
Dim p1(0 To 2) As Double
Dim p2 As Variant
Dim pntobj As Variant Dim lobj As AcadLWPolyline
Dim vers(0 To 2000) As Double Dim k As Double
Dim g As Double
Dim b As Double Dim x1 As Double
Dim y1 As Double
Dim x As Double
Dim y As Double
Dim i As Double
Dim a As Double Dim l As Double
Dim m As Double
Dim n As Double
Dim O As Double
Dim P As Double
Dim Q As Double '确定函数曲线的参数K的值 g = 32.7718 / 1000
b = 68.5036
k = g / (2 * b) '确定函数曲线的第一点的坐标
l = 100
m = 100
n = 0
p1(0) = l
p1(1) = m
p1(2) = n '提取当前鼠标的动态坐标
p2 = ThisDrawing.Utility.GetPoint(, "p2")
O = p2(0)
P = p2(1)
Q = p2(2) '计算曲线函数参数X1、Y1的值
x1 = (P - m + k * l ^ 2 - k * O ^ 2) / (2 * k * (l - O))
y1 = m - k * (l - x1) ^ 2 '确定函数曲线的第一点
vers(0) = l
vers(1) = m i = l
a = 2 '利用循环确定函数曲线上的端点之间的若干坐标值
If i <= p1(0) Then
While i <= p1(0)
x = p1(0) + i
y = k * ((x - x1) * 10) ^ 2 + y1
i = i + 0.5
vers(a) = x
vers(a + 1) = y
a = a + 2
Wend
Else
While i > p1(0)
x = p1(0) - i
y = k * ((x - x1) * 10) ^ 2 + y1
i = i - 0.5
vers(a) = x
vers(a + 1) = y
a = a + 2
Wend
End If '确定函数曲线的最后一点
vers(a) = p2(0)
vers(a + 1) = p2(1) '利用多义线绘制动态函数曲线
Set lobj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vers) End Sub
发表于 2004-2-25 16:42:00 | 显示全部楼层
是不是在两点中间画抛物线呢?在(中间插几个点呢?或者是由间隔距离来控制?)
 楼主| 发表于 2004-2-25 18:26:00 | 显示全部楼层
在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程?
发表于 2004-2-25 22:12:00 | 显示全部楼层
liyanchao1发表于2004-2-25 18:26:00在一个已知的固定点、和当前的活动鼠标所在的动态点之间画抛物线,中间点的选取由间隔距离来控制!请问大侠该如何编程?

抛物线的编程不难,关键是你表达不清楚!过两点是不能确定唯一的抛物线的,"中间点的选取由间隔距离来控制!"是什么意思?!
 楼主| 发表于 2004-2-26 08:56:00 | 显示全部楼层
在要绘制的抛物线: y=k*(x-x1)^2+y1 中,已知曲线上的一个固定点的坐标、和参数k的值,要绘制一条同时通过当前活动鼠标的动态坐标点的动态抛物线。中间的点的坐标的选取由循环语句控制:按x坐标每增加或减少i值进行取点。关键是如何获得活动鼠标的动态坐标值;请问各位大侠,下面这段程序能否获得鼠标的动态坐标值,使得绘制的抛物线随着鼠标的移动而动态变化?那位大侠能否帮助编一个获得活动鼠标的动态坐标值的程序? '提取当前鼠标的动态坐标
p2 = ThisDrawing.Utility.GetPoint(, "p2")
O = p2(0)
P = p2(1)
Q = p2(2)
发表于 2004-2-26 12:19:00 | 显示全部楼层
跟“橡皮条”一样吗?以前有人讨论过,但不知道有没有结果,好像很复杂的……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-22 16:41 , Processed in 0.181473 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表