Vb6 数学/编程:如何使一个对象通过一条直线形成的路径

Vb6 数学/编程:如何使一个对象通过一条直线形成的路径,vb6,2d,line,collision,Vb6,2d,Line,Collision,现在我在VB6中做这件事,但我认为我在VB6中做什么并不重要,不是吗?我相信这和数学有关 这就是问题所在,看看这张图片 如图所示,有一条黑线和一个灰色圆圈。我希望圆从左下角移动到右下角,但我也希望它沿着直线的路径移动,这样它就可以到达第二张图片,如下所示: 现在我如何才能做到这一点?同样,使用VB6。我认为有多种方法可以实现这一点,但我首先想到的是。它做出了一些假设。。。就像你的直线朝正方向走,它从0,0开始。如果这两种情况都不正确,那么您需要编写更多代码来进行调整 ============

现在我在VB6中做这件事,但我认为我在VB6中做什么并不重要,不是吗?我相信这和数学有关

这就是问题所在,看看这张图片

如图所示,有一条黑线和一个灰色圆圈。我希望圆从左下角移动到右下角,但我也希望它沿着直线的路径移动,这样它就可以到达第二张图片,如下所示:


现在我如何才能做到这一点?同样,使用VB6。

我认为有多种方法可以实现这一点,但我首先想到的是。它做出了一些假设。。。就像你的直线朝正方向走,它从0,0开始。如果这两种情况都不正确,那么您需要编写更多代码来进行调整

=================================================

    Psuedocode:
    'To track current coordinates of the center of the circle
    dim x as float, y as float
    x = 0: y = 0

    'Coordinates for the line
    dim x1 as float, y1 as float, x2 as float, y2 as float
    x1=0: y1=0: x2=50: y2=75

    'How much we're going to move the circle at a time
    dim xStep as float, yStep as float, stepSize as float
    stepSize = 100
    xStep = x2 / stepSize
    yStep = y2 / stepSize

    Do
       'Draw circle here with x, y for coordinates
       x = x + xStep
       y = y + yStep
    Loop Until xStep > x2

我认为有多种方法可以实现这一点,但我首先想到的是。它做出了一些假设。。。就像你的直线朝正方向走,它从0,0开始。如果这两种情况都不正确,那么您需要编写更多代码来进行调整

=================================================

    Psuedocode:
    'To track current coordinates of the center of the circle
    dim x as float, y as float
    x = 0: y = 0

    'Coordinates for the line
    dim x1 as float, y1 as float, x2 as float, y2 as float
    x1=0: y1=0: x2=50: y2=75

    'How much we're going to move the circle at a time
    dim xStep as float, yStep as float, stepSize as float
    stepSize = 100
    xStep = x2 / stepSize
    yStep = y2 / stepSize

    Do
       'Draw circle here with x, y for coordinates
       x = x + xStep
       y = y + yStep
    Loop Until xStep > x2

好的,我不知道VBA6,但既然你说:

我认为我做什么并不重要

我将给出一个通用的解决方案,包括圆心坐标和直线端点

这条线可以视为一个向量:

 (line.x2-line.x1, line.y2-line.y1)
你不需要把它写在你的程序里,也不需要说它是一个向量

您需要得到向量的大小并将其指定给变量:

unitSize = sqrt((line.x2-line.x1)^2 + (line.y2-line.y1)^2)
现在将其转换为单位向量分量,并获得单独的分量:

unitX = (line.x2-line.x1)/unitSize
unitY = (line.y2-line.y1)/unitSize
现在,无论何时更新圆:

do {
    circle.x = circle.x + unitX * incrementSize //incrementSize scales how big the movement is assign it to whatever you seem fit.
    circle.y = circle.y + unitY * incrementSize
until (circle.x >= line.x2) //Or <= line.x2 depends which way you are going.
do{
circle.x=circle.x+unitX*incrementSize//incrementSize缩放移动的大小将其分配给您认为合适的对象。
circle.y=circle.y+单位*递增大小

直到(circle.x>=line.x2)//或者好的,我不知道VBA6,但是,既然你说:

我认为我做什么并不重要

我将给出一个通用的解决方案,包括圆心坐标和直线端点

这条线可以视为一个向量:

 (line.x2-line.x1, line.y2-line.y1)
你不需要把它写在你的程序里,也不需要说它是一个向量

您需要得到向量的大小并将其指定给变量:

unitSize = sqrt((line.x2-line.x1)^2 + (line.y2-line.y1)^2)
现在将其转换为单位向量分量,并获得单独的分量:

unitX = (line.x2-line.x1)/unitSize
unitY = (line.y2-line.y1)/unitSize
现在,无论何时更新圆:

do {
    circle.x = circle.x + unitX * incrementSize //incrementSize scales how big the movement is assign it to whatever you seem fit.
    circle.y = circle.y + unitY * incrementSize
until (circle.x >= line.x2) //Or <= line.x2 depends which way you are going.
do{
circle.x=circle.x+unitX*incrementSize//incrementSize缩放移动的大小将其分配给您认为合适的对象。
circle.y=circle.y+单位*递增大小

直到(圆x>=线x2)//或者好吧,我已经实现了你告诉我的,我理解。它适用于正的线角,但不是相反,当单位大小为负的线时,它会给我一个错误。解决方法是什么?@Qasim:我在量值计算中犯了一个错误……现在它应该一直都能工作。我忘记了平方不仅如此,这是错误的,但是你可以得到-numbers.sqrt和neg numbers=:(这是错误的一行:
unitSize=Sqr((ShotLine(t).X2-ShotLine(t.X1)+(ShotLine(t.Y2-ShotLine(t.Y1))
它表示无效呼叫或过程,方程无法完成?只要线角度相反,就会发生这种情况,这可能是什么问题?@Qasim:
unitSize=Sqr((斜线(t).X2-斜线(t).X1)^2+(斜线(t).Y2-斜线(t).Y1)^2)
@anon:这个代码应该替换另一个,还是只在线位于相反方向时才替换?好的,我已经实现了你告诉我的,我理解。它适用于正线角度,但不是相反方向,当我识别unitSize为负线时,它会给我一个错误。解决方案是什么?@Qasim:我在计算震级时犯了一个错误……现在它应该一直都能工作。我忘了把它平方。不仅如此,你还可以得到-number.sqrt和neg number=:(下面是错误的一行:
unitSize=Sqr((ShotLine(t).X2-ShotLine(t.X1)+(ShotLine(t.Y2-ShotLine(t.Y1))
它表示无效呼叫或过程,方程无法完成?只要线角度相反,就会发生这种情况,这可能是什么问题?@Qasim:
unitSize=Sqr((斜线(t).X2-斜线(t).X1)^2+(斜线(t).Y2-斜线(t).Y1)^2)
@anon:该代码应该替换另一个代码,还是仅当行位于相反方向时才替换?请不要发布两次。请不要发布两次。