Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
1

Как организовать движение объекта к цели

23.09.2014, 18:33. Просмотров 5073. Ответов 129
Метки нет (Все метки)

Всем, Здравствуйте! Интересует такой вопрос. Как организовать движение объекта (обьект , двигается вперед, но может поворачивать на определенный угол и снова едет вперед) к цели С, из A в B цель передвинулась, я получил координаты из них стороны и углы треугольника (через аркосинус), полученного вершинами, начала , куда передвинулся обьект и целью, Дальше нужно организовать перемещение , вернее , надо как то проверять условия, чтобы обьект , через определённые промежутки времени, опять проверял направление и снова двигался к цели. Уже 3 дня бьюсь над этой задачей. Не знаю как организовать проверку и правильный поворот. То есть цель , сама должна поворачиваться, потом двигаться , проверять и так далее) Помогите пожалуйста!
0
Миниатюры
Как организовать движение объекта к цели  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2014, 18:33
Ответы с готовыми решениями:

ИИ для игры - движение объекта к цели
подскажите пожалуйста код с помощью которого можно реализовать что бы ии (npc1) двигался не просто...

Как организовать движение объекта по координатам?
Добрый день,есть класс,описывающий движение машины,подскажите,как вывести движущуюся машину на...

Организовать движение объекта
Организовать движение объекта снизу вверх. При движении ракета должна оставлять дымовой след....

Организовать движение объекта по форме при нажатии на клавишу
Всем привет. Подскажите, пожалуйста, как правильно организовать движение объекта по форме при...

129
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
23.09.2014, 18:52  [ТС] 2
Если есть, похожие темы, пожалуйста перенаправьте, но также , если есть возможность, ответьте. Не важен именно код, а важна логика , какие условия определить , как их проверять.
0
Заблокирован
23.09.2014, 19:53 3
Попробуем рассмотреть все по-порядку.
Обозначения:
x, y - координаты объекта (начальные)
x2, y2 - конечные
xc, yc - координаты цели (начальные)
xc2, yc2 - конечные
V - модуль скорости объекта ( const)
vx, vy - проекции скорости на оси (ведь скорость вектор)
Vc - модуль скорости цели
vcx, vcy - проекции скорости (для цели)
t - интервал времени, через этот промежуток времени
происходит изменение скорости (поворот)
Итак.
Начальные значения координат объекта и цели
должны быть заданы. Кроме того должны быть также и их модули
скоростей. Тут следует отметить: если цель будет двигаться
быстрее объекта (и убегать от него), то объект не настигнет цель
никогда.
Далее.
Объект движется его координаты определяются по формулам:
x2 = x + vx*t
y2 = y + vy*t
Аналогичные формулы могут быть записаны и для цели.
Теперь Самое главное - Поворот
Итак.
Нам заданы величины:
x, y, xc, yc - то есть координаты объекта и цели
А надо определить новые проекции скорости объекта, чтобы
он прямо двигался на цель. Это легко сосчитать, смотрите
(это объяснение)
Чтобы объект прямо двигался на цель должна быть
верна пропорция vx/vy = (xc -x)/(yc -y)
Вы хорошо поняли? Если нет нарисуйте эскиз. Это решает
Вашу задачу!! Итак, правая часть легко вычисляется
Обозначим ее через D, и мы получим
vx/vy = D и кроме того нам дано (известно) vx2+vy2 = V2
Решая методом подстановки эту систему уравнений определим
vx и vy - то есть новые проекции скорости объекта
Все, задача решена.
Я не знаю, как вы собираетесь задавать проекции скорости
цели. Это можно сделать рандомно. Удачи Вам!
0
es geht mir gut
11211 / 4689 / 1177
Регистрация: 27.07.2011
Сообщений: 11,422
23.09.2014, 19:58 4
Если я правильно понял...

Ваша точка синяя . Управление движением осуществляется с клавиатуры.
Красная точка стремится её догнать (или убежать от красной)
Как организовать движение объекта к цели

Код элементарный
Visual Basic
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Option Explicit
 Dim px As Single, py As Single, ex As Single, ey As Single, c As Single
    Private Sub Form_Load()
        c = 1
        PictureBox1.DrawWidth = 5
        PictureBox1.DrawStyle = 1
        px = 200: py = 150
        ex = 100: ey = 150
    End Sub
 
    Public Sub rIs()
        'PictureBox1.CreateGraphics.Clear (System.Drawing.Color.Black)
        PictureBox1.Cls
        PictureBox1.PSet (ex, ey), vbRed
        PictureBox1.PSet (px, py), vbBlue
        'PictureBox1.CreateGraphics.DrawRectangle(System.Drawing.Pens.Green, px, py, 1, 1)
    End Sub
 
    Public Sub Dognat()
        If ex < px Then ex = ex + c Else ex = ex - c
        If ey < py Then ey = ey + c Else ey = ey - c
    End Sub
 
    Public Sub Ubezat()
        If ex < px Then ex = ex - c Else ex = ex + c
        If ey < py Then ey = ey - c Else ey = ey + c
    End Sub
    
    Private Sub Timer1_Timer()
        If px < 1 Then px = 0
        If px > PictureBox1.Width - 10 Then px = PictureBox1.Width - 9
        If py < 1 Then py = 0
        If py > PictureBox1.Height - 10 Then py = PictureBox1.Height - 9
        Dognat 'Красная точка догоняет синюю
        'Ubezat' Красная точка убегает от синей
        If ex < 1 Then ex = 1
        If ex > PictureBox1.Width - 10 Then ex = PictureBox1.Width - 10
        If ey < 1 Then ey = 1
        If ey > PictureBox1.Height - 10 Then ey = PictureBox1.Height - 10
        rIs
End Sub
  
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       Select Case KeyCode
            Case 37
                px = px - c
            Case 39
                px = px + c
            Case 38
                py = py - c
            Case 40
                py = py + c
        End Select
End Sub
1
Вложения
Тип файла: rar Движение к цели.rar (4.8 Кб, 13 просмотров)
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
23.09.2014, 20:20  [ТС] 5
SoftIce, Дорогой , огромная тебе благодарность.
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
23.09.2014, 20:44  [ТС] 6
Я пытаюсь вытащить от сюда алгоритм поиска. Я ищу цель не в бейсике. У меня на экране , находится определенная точка и перосонаж по карте бежит к ней, он может поворачиваться, только клавишами A и D и потом идти вперед, как мне на экране определить куда идти,
0
Миниатюры
Как организовать движение объекта к цели   Как организовать движение объекта к цели  
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
23.09.2014, 21:04  [ТС] 7
на картинке надо, не прямогульник, а треугольник, весь день у компа сижу, голова уже не соображает(

Добавлено через 1 минуту
Visual Basic
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
LCLICK(613,322)  // 4754312
//--------------------------------
$edpov=2350/360 
//--------------------------------
#ps2_keyboard
//--------------------------------
$x0=0
$y0=0
$xc=0
$yb=0
$xc=0
$yc=0
$ac=0
$ab =0
$bc =0
//-----------------
 
 
$xc=  687
$yc=  445
$shag=3000
//-----------------
m1:
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
   $x0=$_return1
   $y0=$_return2
   KEYDOWN (#w)
   WAITMS (1000)
   KEYUP(#w)
ELSE
   KEYDOWN (#A)
   WAITMS (50)
   KEYUP(#A)
   GOTo(m1)
end_if
 
m2:
WAITMS(50)
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
   $xb=$_return1
   $yb=$_return2    
   KEYDOWN (#d)
   WAITMS ($ugzap3)
   KEYUP(#d)
   $ugzap3=0
ELSE
$ugzap3=$ugzap3+50
   KEYDOWN (#A)
   WAITMS (50)
   KEYUP(#A)
   GOTo(m2)
end_if  
 
WAITMS(50)   
 
m3:
goto(rasug)
rasug1:
if ($ac>10)
goto(usloviya)
usloviya1:
goto(cvet)
cvet1:
WAITMS(50)
KEYDOWN (#w)
WAITMS ($shag)
KEYUP(#w) 
goto(cvet2)
cvet21:
goto(m3)
end_if
 
HALT
//--------------------------------
 
cvet:
$ugzap1=0
m4:  
GETSCREEN 
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
$x0=$_return1
$y0=$_return2
kEYDOWN (#d)
WAITMS ($ugzap1)
KEYUP(#d)
$ugzap1=$ugzap1+50
ELSE
kEYDOWN (#A)
WAITMS (50)
KEYUP(#A)
$ugzap1=$ugzap1+50
GOTo(m4) 
end_if
goto(cvet1)
 
HALT
//--------------------------------
 
cvet2:
$ugzap2=0
m5:
GETSCREEN
COLORMODE(6)
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
$xb=$_return1
$yb=$_return2
KEYDOWN (#d)
WAITMS ($ugzap2)
KEYUP(#d) 
ELSE     
kEYDOWN (#A)
WAITMS (50)
KEYUP(#A)
$ugzap2=$ugzap2+50
GOTo(m5) 
end_if  
goto(cvet21)  
  
HALT
//--------------------------------
 
 
rasug:
$ac=dist($x0,$y0,$xc,$yc)
$a=$ac
$ab=dist($x0,$y0,$xb,$yb)
$b=$ab
$bc=dist($xc,$yc,$xb,$yb)
$c=$bc
//------
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\a.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\b.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\c.txt")
WAITMS(50)
//------
TFCLEAR ("C:\KLM\lotro\ras\aug.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\cug.txt")
WAITMS(50)
//------
TFWrite("C:\KLM\lotro\ras\a.txt",$a,1)
WAITMS(50)
TFWrite("C:\KLM\lotro\ras\b.txt",$b,1)
WAITMS(50)
TFWrite("C:\KLM\lotro\ras\c.txt",$c,1)
WAITMS(50)
//------
EXECUTE("C:\KLM\lotro\arcos.exe")
WAIT(1)
//------
$ug= TFREAD ("C:\KLM\lotro\ras\aug.txt",1)
WAITMS(50)
$ug0= TFREAD ("C:\KLM\lotro\ras\cug.txt",1) 
goto(rasug1)            
 
HALT  
//-------------------------------- 
     
usloviya:
$tt=0
inc($g,1)
print("___________________________",$g)
$ugpov=180-$ug
$pov=round($ugpov*$edpov,0)
$ug1=$ug0+$ug0/10
//$povnov=$ug0
$rad1=3.14159265359/180*$ug1
$rad0= 3.14159265359/180*$ug0
print("rad0  ",$rad0," $rad1  ",$rad1)
print("ug  ",$ug1," $ug0  ",$ug0)
print("ugpov  ",$ugpov)
//------
if ($rad0<$rad1)
$tt=1
KEYDOWN (#a)
WAITMS ($pov)
KEYUP(#a)
end_if
 //------
if ($rad0>$rad1)
$tt=2
KEYDOWN (#d)
WAITMS ($pov)
KEYUP(#d)
end_if
//if ($rad0=$rad)
//end_if
//------
if ($tt=2)
print("d ")
else
print("a ")
end_if
print("___________________________",$g)
goto(usloviya1)
           
HALT
//--------------------------------
Добавлено через 2 минуты
SoftIce, подскажи пожалуйста.
0
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
24.09.2014, 06:59 8
Цитата Сообщение от smsgeorge Посмотреть сообщение
Как организовать движение объекта (обьект , двигается вперед, но может поворачивать на определенный угол и снова едет вперед) к цели С,
"Вперед" - это куда? На деревню дедушке? Вы говорите что он движется "к цели С", но на рисунке видно он движется по касательной к окружности с центром в С. Как понимать?

Вот есть объект в точке A и цель в точке С. Четко сформулируйте закон/правила движения, остальное не составит труда
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 08:20  [ТС] 9
Igor3D, Вперед то есть туда куда смотрит, потом пройдя определенное положение. он вычисляет углы и должен повернуться но определенный угол! мне же нужно определить поворачиваться влево на (180 минус угол ) или право на (180 минус угол).
Или вот следующее если сделать , то все решиться.
Как определить сколько радиант в точке А и сколько в B, зная координаты к примеру цетра и точке А и В ?
Так как радианты начинаются с нуля и идут против часовой стрелки, то как вычислить сколько радиан до точек?
0
Миниатюры
Как организовать движение объекта к цели  
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 08:23  [ТС] 10
Или вот следующее если сделать , то все решиться.
Как определить сколько радиант в точке А и сколько в B, зная координаты к примеру цетра и точке А и В ?
Так как радианты начинаются с нуля и идут против часовой стрелки, то как вы
0
Миниатюры
Как организовать движение объекта к цели  
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
24.09.2014, 10:00 11
Цитата Сообщение от smsgeorge Посмотреть сообщение
Вперед то есть туда куда смотрит, потом пройдя определенное положение. он вычисляет углы и должен повернуться но определенный угол! мне же нужно определить поворачиваться влево на (180 минус угол ) или право на (180 минус угол).
Или вот следующее если сделать , то все решиться.
То есть в каждый момент у объекта есть свой собственный вектор скорости. Хорошо, но откуда он берется, и как это связано с центром? Вектор должен разворачиваться на центр? Тогда должна быть скорость разворота.

Цитата Сообщение от smsgeorge Посмотреть сообщение
Как определить сколько радиант в точке А и сколько в B, зная координаты к примеру цетра и точке А и В ?
Через скалярное произведение нормированных векторов CA и СB

Не по теме:

Вижу что "надо" и человек вежливый, но так излагает задачу что помочь нет возможности :)

0
11136 / 3523 / 620
Регистрация: 13.02.2009
Сообщений: 10,502
24.09.2014, 10:51 12
и сколько в B,
Ну, наверное, по законам тригонометрии через арсинус.
Типа сунус угла есть отношение противоположного катета к гипотенузе.
Т.е разнице ординат точек к расстоянию между точками...
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 11:10  [ТС] 13
Igor3D, Ну я сделал , чтобы он разворачивался на определенный угол, это не проблема, просто он иногда проскакивает, поэтому он потом снова должен условие проверять. А скажи пожалуй, что за скаляроное произведение?
0
Миниатюры
Как организовать движение объекта к цели   Как организовать движение объекта к цели  
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 11:15  [ТС] 14
Не знаю понял ли я, просто мне надо определить вектор АВ идет слева направо , или справа налево, исходя из этого я буду поворачивать налево или направо.
0
Миниатюры
Как организовать движение объекта к цели   Как организовать движение объекта к цели  
Заблокирован
24.09.2014, 11:27 15
Выяснить, существует ли треугольник с координатами вершин A(x1,y1), B(x2,y2), C(x3,y3), если да, то найти его площадь - ключевые слова: может выдать ещё и дополнительную информацию о том, по или против часовой стрелки идет обход a>b>c>a или слева/справа от луча [a,b) находится точка с
1
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
24.09.2014, 12:02 16
Цитата Сообщение от smsgeorge Посмотреть сообщение
Igor3D, Ну я сделал , чтобы он разворачивался на определенный угол, это не проблема, просто он иногда проскакивает, поэтому он потом снова должен условие проверять.
Ну вот есть вектор скорости (x, y). Напр x = 5, y = 2. Значит за 1 секунду объект сместится на 5 по Х и на 2 по Y. Чтобы развернуть этот вектор на угол alpha есть формулы поворота, они те же что косинус/синус суммы

x_rot = x * cos(alpha) - y * sin(alpha);
y_rot = x * sin(alpha) + y * cos(alpha);

Чтобы найти текущий угол между вектором скорости и направлением на цель

ax = c.x - a.x; // вектор из A в С
ay = c.y - a.y;
len = sqrt(ax * ax + ay * ay);
ax /= len;
ay /= len; // (ax, ay) нормированный вектор из A в С

len = sqrt(x * x + y * y);
bx = x / len;
by = y / len; // (bx, by) нормированный вектор скорости

dot = ax * bx + ay * by; // косинус угла между векторами
angle = acos(dot); // сам угол

Цитата Сообщение от smsgeorge Посмотреть сообщение
А скажи пожалуй, что за скаляроное произведение?
Я реально устал разговаривать с "кулемой" которая ничего не может толком сказать. А если она еще и тыкает - будьте здоровы.
1
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 12:04  [ТС] 17
Апострофф, А что мне площадь даст? Он идет бывает против , бывает по, в этом и загвоздка. поворот я сделал, а вот куда крутиться?!
0
11136 / 3523 / 620
Регистрация: 13.02.2009
Сообщений: 10,502
24.09.2014, 12:09 18
он может поворачиваться, только клавишами A и D
Это нисколько не объясняет задачу!
опять проверял направление и снова двигался к цели.
Всё-таки он должен сам проверять направление или им управляют?

Добавлено через 1 минуту
Если управляют клавишами, то меняйте угол и определяйте новые координаты по модулю скорости и Sin-Cos угла
1
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 12:22  [ТС] 19
Alex77755, он направление, то есть угол, сам определяет, вот он прошел чуть-чуть, определил угол поворота, повернул (из-за того, что я коректо не могу определить его положение относительно с, решилось бы если узнать какая из точек А и В первее, то есть если он двигается право по"окружности " так сказать, то поворачивать надо на право, если движется налево, то поворачивать на до налево, это если учитывать , что он стоит выше цели) , снова идет вперед, но бывает он поворачивает чуть больше чем обычно, в итоге через определенное время снова идет проверка , и так пока не придет.
0
Миниатюры
Как организовать движение объекта к цели  
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 98
24.09.2014, 12:22  [ТС] 20
Да угол у меня есть, мне только нужно определить, куда я двигаюсь влево , право, вверх, вниз относительно цели , поворачивать могу только клавишами A и D , вернее компьютер сам это делает, потом идет вперед , находит новый угол поворота, но вот проблема в том , куда поворачивать, налево или направо. Вот я и хочу узнать, как мне узнать вектор движения налево или направо, там скорость не важна и нету ее.

Добавлено через 2 минуты
Igor3D, а угол какой ты нашел ?
Цитата Сообщение от Igor3D Посмотреть сообщение
angle = acos(dot); // сам угол
Добавлено через 10 минут
Igor3D, Как организовать движение объекта к цели
0
Миниатюры
Как организовать движение объекта к цели  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2014, 12:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как организовать движение по X и Y в центр?
Нужен не сам код. А именно алгоритм.

Как организовать движение новых PicrtureBox?
Всем привет! Создаю новые PictureBox, хочу, чтобы они сдвигались влево. Когда я помещаю функцию...

Как организовать движение товаров склада?
Помогите, плиз, организовать движение товаров: пополнение склада, изъятие со склада (продажа)... ...

Возможно ли сделать движение зрачков, реагирующее на движение какого-либо объекта
Вообщем благодаря модеру удалось разукрасить картинку,за что ему спасибо. Нужна анимация для нее....

Сформировать меню: 1) свободное движение объекта 2)движение с клавиатуры
Сформировать на экране меню, состоящее из следующих пунктов: 1. Движение вдоль периметра экрана....

Как лучше всего организовать движение textView вниз?
Среда разработки - Android Studio. Как лучше всего организовать движение textView вниз? Через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.