powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Векторное движение шейпа (объекта)
8 сообщений из 8, страница 1 из 1
Векторное движение шейпа (объекта)
    #37513280
jabers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Вчера задался такой целью:
У меня на форме есть 2 шейпа (А и Б), и шейп (А) должен двигаться (или достичь координат) шейпа (Б). ( см. пункт 1 на рис. )


Движение должно быть не скачком, а плавным.
Собственно проблема и стоит в том, КАК описать код движения.

Код: plaintext
1.
2.
A.x = A.x +  10 
A.y = A.y +  10 
не подходит ровно также, как и A.move
Так, как в таком случае шейп будет двигаться с одинаковым приращениям по осям (45 градусов). Это подохдит, если шейп (Б) на диагонали.
А что делать, если он стоит как показано в пункте 2 (см. рис.)?
Шейп (А) просто улетит в никуда.

Я знаю, что можно как-то использовать вектор...но в голову ни 1 реализация не приходит.
Спасибо
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513321
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabers,

а в чем проблема использовать разное заранее вычисленное приращение?
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513336
jabers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблемы то нет, только каким образом оно высчитывается.
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513357
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabers,

jabers,

исходя из чистой математики, а не программирования, вертикальный вектор у тебя будет (конечная позиция).y - (начальная позиция).y
горизонтальная соответственно (конечная позиция).х - (начальная позиция).х
например, тебе нужно, чтобы объект двигался с определённой скоростью(10), то длина ветора, направленного к конечной точке, будет 10. отсюда находишь коэффициэнт k=(((конечная позиция).х - (начальная позиция).х) 2 +((конечная позиция).y - (начальная позиция).y) 2 ):10
тогда
A.x = А.х + (конечная позиция).х - (начальная позиция).х*k
A.y = A.y + (конечная позиция).y - (начальная позиция).у*K
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513364
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k=(((конечная позиция).х - (начальная позиция).х)2+((конечная позиция).y - (начальная позиция).y)2):10 2
A.x = (А.х + (конечная позиция).х - (начальная позиция).х):k
A.y = (A.y + (конечная позиция).y - (начальная позиция).у):K
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513452
jabers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можете переписать это в код? Если есть Точка А и B
Я не совсем понимаю формулы.
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513478
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabers,

что-то типа того
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Option Explicit
Dim ax
Dim ay
Dim bx
Dim by
Dim k
Private Sub Form_Load()
Dim vektor


Label1.Left =  20 
Label1.Top =  100 
ax = Label1.Left
ay = Label1.Top
bx =  200 
by =  1000 
vektor =  100 
k = ((by - ay) * (by - ay) + (bx - ax) * (bx - ax)) / vektor / vektor
End Sub

Private Sub Timer1_Timer()
Label1.Left = Label1.Left + bx / k
Label1.Top = Label1.Top + by / k
If Label1.Left = bx Then
Timer1.Enabled = True
End If
End Sub
...
Рейтинг: 0 / 0
Векторное движение шейпа (объекта)
    #37513495
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Option Explicit
Dim ax
Dim ay
Dim bx
Dim by
Dim k
Private Sub Form_Load()
Dim vektor


Label1.Left =  20 
Label1.Top =  100 
ax = Label1.Left
ay = Label1.Top
bx =  200 
by =  1000 
vektor =  100 
k = ((by - ay) * (by - ay) + (bx - ax) * (bx - ax)) ^  0 . 5  / vektor
End Sub

Private Sub Timer1_Timer()
Label1.Left = Label1.Left + bx / k
Label1.Top = Label1.Top + by / k
If Label1.Left > bx Then эздесь можешь додумать, как сделать постановку координат более точной. здесь будет немного различаться
Timer1.Enabled = False
End If
End Sub
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Векторное движение шейпа (объекта)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]