Математика / программирование: как заставить объект пройти путь, сделанный из линии - PullRequest
0 голосов
/ 10 ноября 2011

Сейчас я делаю это в VB6, но не думаю, что это важно, для чего я это делаю, не так ли?Я считаю, что это связано с математикой.

Вот проблема, посмотрите на эту картину

enter image description here

Как вы можете видеть на этом изображении, естьэто черная линия и серый круг.Я хочу, чтобы круг перемещался от нижнего левого к нижнему правому, но я также хочу, чтобы он оставался на пути линии, чтобы он достиг нашего второго изображения следующим образом:

enter image description here

Теперь, как мне это сделать?Опять же, используя VB6.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Я думаю, что есть разные способы сделать это, но вот первое, что приходит мне в голову. Он делает некоторые предположения ... например, ваша линия идет в положительном направлении и начинается с 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
1 голос
/ 10 ноября 2011

Хорошо, я не знаю 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.

Надеюсь, это поможет.

...