自己觉得很难的VB算法问题.

ykwang 2009-03-20 08:08:17
已知有15根塑料管
假设第一个长为150 最后一根长为60,中间的塑料管长度各为多少时,使塑料管从第一根到第十五根,排列起来看起来有弧度呢. 可以类似于抛物线弧度.

高手请赐教,非常感谢
...全文
188 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
o99552913 2009-03-21
  • 打赏
  • 举报
回复
数学问题
KiteGirl 2009-03-21
  • 打赏
  • 举报
回复

公式推导:

任何一本数学手册、课本、Wiki、百度都能查到的椭圆方程(适用于题目所指情况):
x^2/b^2+y^2/a^2=1 (a>b>0)

公式变换(初中数学知识):

y^2/a^2=1-x^2/b^2

y^2=a^2*(1-x^2/b^2)

y=(a^2*(1-x^2/b^2))^0.5

KiteGirl 2009-03-21
  • 打赏
  • 举报
回复

PipeLong(51, 1, 15),测试程序输出的字符串:

A
A
AA
AA
AAA
AAAA
AAAAAA
AAAAAAAA
AAAAAAAAAA
AAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
KiteGirl 2009-03-21
  • 打赏
  • 举报
回复

Private Sub Form_Load()
Dim tLongs() As Long
Dim tIndex As Long
tLongs() = PipeLong(150, 60, 15)
Text1.Text = ""
For tIndex = 0 To 14
Text1.Text = Text1.Text & String(tLongs(tIndex), "A") & vbCrLf
Next
End Sub

Public Function PipeLong(ByVal pPipeMax As Long, ByVal pPipeMin As Long, ByVal pCount As Long, Optional ByVal pUnValue As Boolean = False) As Long()
'PipeLong函数
'语法:[tOutValues()] = PipeLong(pPipeMax, pPipeMin, pCount[, pUnValue]) As Long()
'功能:产生椭圆曲线管组长度数据。
'参数: long pPipeMax 必要参数,管最长值。
' long pPipeMin 必要参数,管最短值。
' long pCount 必要参数,管数量。
' boolean pUnValue 可选参数,反向曲线。
'输出: long tOutValues()管长数组,数组元素从0到pCount - 1
Dim tOutValues() As Long '输出数组
Dim tOutValues_Length As Long '输出数组逻辑数
Dim tOutValues_Index As Long '输出数组逻辑数

tOutValues_Length = pCount - 1

ReDim tOutValues(tOutValues_Length)

Dim tPipeAbs As Long '管组相对长度

tPipeAbs = Abs(pPipeMax - pPipeMin)

For tOutValues_Index = 0 To tOutValues_Length

If pUnValue Then
tOutValues(tOutValues_Index) = pPipeMin + EllipseY(tOutValues_Index, tPipeAbs, tOutValues_Length)
Else
tOutValues(tOutValues_Index) = pPipeMax - EllipseY(tOutValues_Index, tPipeAbs, tOutValues_Length)
End If

Next

PipeLong = tOutValues()
End Function

Public Function EllipseY(ByVal pX As Long, ByVal pA As Long, ByVal pB As Long)
EllipseY = (pA ^ 2 * (1 - (pX ^ 2) / (pB ^ 2))) ^ 0.5
End Function
捧剑者 2009-03-20
  • 打赏
  • 举报
回复
d
神马都能聊 2009-03-20
  • 打赏
  • 举报
回复
任意长度分布,呵呵 没说要把一边进行对齐

熊孩子开学喽 2009-03-20
  • 打赏
  • 举报
回复
当然无法确定方程的每一个参数.
但是楼主也没有要求唯一解呀,只要是"排列起来看起来有弧度" 就可以
goosen 2009-03-20
  • 打赏
  • 举报
回复
等你
ykwang 2009-03-20
  • 打赏
  • 举报
回复
终于眉目了,下午再试试,应该能搞定公式
东方之珠 2009-03-20
  • 打赏
  • 举报
回复
1、15根塑料管的长度是已知的,数据呢??
2、排列间隔50mm
3、类似抛物线,是中间大两头小(抛物线开口向下),还是小间小两头大(抛物线开口向上)??
ykwang 2009-03-20
  • 打赏
  • 举报
回复
能不能帮示例一下, 因为水平有限,望赐教
dlschan 2009-03-20
  • 打赏
  • 举报
回复
ding
lili830209 2009-03-20
  • 打赏
  • 举报
回复
ding
Tiger_Zhao 2009-03-20
  • 打赏
  • 举报
回复
两点 {(0,150), {14,60)} 是无法确定抛物线的。
of123 2009-03-20
  • 打赏
  • 举报
回复

其实不难,数学问题。

比如你利用椭圆曲线,其短半轴是最长和最短塑料管的长度差,长半轴是它们之间的距离。

1 得到椭圆曲线公式。
2 算出每根塑管与最长管的距离 X, 带入公式,求得 Y。
3 Y + 短管长度就是这根管的长度。
ykwang 2009-03-20
  • 打赏
  • 举报
回复
想来想去,是不是可以这样解决.

因为最大与最小两根可以确定, 根数可以确认,间隔可以确定. 是不是可以算出来一个公式. 而这个公式只要我输入总根数,就能算出来,如第二根 就是 第一根长度 * (公式里面有一个参数2),以此类推.

但这个公式不知如何写呢,水平有限,望赐教 .
ykwang 2009-03-20
  • 打赏
  • 举报
回复
嗯,是
假设列表间隔为 50MM, 第一根为150MM,最后一根为60MM,总共有15根塑料管(包括最大最小两根).
iqpkeva 2009-03-20
  • 打赏
  • 举报
回复
我觉得这个问题不单止是中间各根的长度是多少,也在于每根管之间的排列间隔。你想一想是不是这样?
jingtianshenjun 2009-03-20
  • 打赏
  • 举报
回复

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧