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

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

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

Студворк — интернет-сервис помощи студентам
Всем, Здравствуйте! Интересует такой вопрос. Как организовать движение объекта (обьект , двигается вперед, но может поворачивать на определенный угол и снова едет вперед) к цели С, из A в B цель передвинулась, я получил координаты из них стороны и углы треугольника (через аркосинус), полученного вершинами, начала , куда передвинулся обьект и целью, Дальше нужно организовать перемещение , вернее , надо как то проверять условия, чтобы обьект , через определённые промежутки времени, опять проверял направление и снова двигался к цели. Уже 3 дня бьюсь над этой задачей. Не знаю как организовать проверку и правильный поворот. То есть цель , сама должна поворачиваться, потом двигаться , проверять и так далее) Помогите пожалуйста!
Миниатюры
Как организовать движение объекта к цели  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2014, 18:33
Ответы с готовыми решениями:

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

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

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

129
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
26.09.2014, 10:03
Студворк — интернет-сервис помощи студентам
smsgeorge, сникерсни!
Цитата Сообщение от smsgeorge Посмотреть сообщение
Я вчера это все делал, а у меня ничего не получалось, я вчера столько всего перепробовал, сейчас снова сделаю.
Делай как хочешь, можешь воспользоваться магией.
Тут тебе кроме скалярного произведения и и нормировки (отсюда и длины) вектора, знать ничего не нужно.
Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока; для определения спереди или сзади - скалярное произведение вектора направления на цель и вектора направления игрока; Чтобы найти перпендикуляр - опять скалярное произведение.
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 10:12  [ТС]
Ну блин , он все равно крутится(

Добавлено через 2 минуты
The trick, для определения спереди или сзади - скалярное произведение вектора направления на цель и вектора направления игрока - это я сделал
Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока - это как? поэтому и крутится

Добавлено через 2 минуты
The trick, Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления Это и есть тот вектор (0 -1)?))
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
26.09.2014, 10:13
Цитата Сообщение от smsgeorge Посмотреть сообщение
Ну блин , он все равно крутится(
Я тебе дал описание и код - почему там не крутится? Почему там объект преследует цель? А теперь смотри свой код, что-то там не так.
Цитата Сообщение от smsgeorge Посмотреть сообщение
Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока - это как?
Visual Basic
1
vec.X * src.d.Y - vec.Y * src.d.X
Чтобы найти перпендикуляр к вектору, нужно решить систему полагая что 〈a,b〉 = 0, |a|=|b|
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 10:30  [ТС]
выходит четыре условия:
1)Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока;
2)Для определения спереди или сзади - скалярное произведение вектора направления на цель и вектора направления игрока; Чтобы найти перпендикуляр - опять скалярное произведение.
if 1<0 & 2<0
if 1<0 & 2>0
if 1>0 & 2>0
if 1>0 & 2<0

Добавлено через 4 минуты
The trick, я взял вектор от 1 точки до цели и от первой точки до вектора (0 -1) , не так вообще сделал?

Добавлено через 3 минуты
The trick, вот нашел то?
ваш вектор имеет координаты m,n
искомый вектор имеет координаты n1,m1
Условие перпендикулярности n1/m1=-m/n
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 10:40  [ТС]
The trick, Давай чтобы не запутаться , по шагам. Это я верно сделал? Чтобы я мог идти дальше и не зацикливаться?
Миниатюры
Как организовать движение объекта к цели  
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
26.09.2014, 10:44
smsgeorge, ты не те вектора берешь. Ты хоть думай немного. Зачем ты взял эти 2 вектора?
Ты работаешь только с AB и AC.
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 11:43  [ТС]
The trick, у меня сейчас температура 38, может и туплю из-за этого.
Вот так то есть надо.?
(AX - CX) * (AY - BY) - (AX - BX) * (AY - CY)
И вправду затупил)

С этим разобрались.
Теперь к перпендикуляру.

Добавлено через 9 минут
The trick,〈a,b〉 = 0, |a|=|b| модуль это длинна вектора, значит сравнить их длинны?

Добавлено через 6 минут
The trick,
в том хоть направлении рою? каноническое уравнение прямой:
(x-x1)/(x1-x2)=(y-y1)/(y1-y2)

Его приводим к виду:
a*x+b*y+c=0

В нем, вектор с координатами (a,b) перпендикулярен прямой.

Отсюда, уравнение прямой, перпендикулярной данной, которая проходит через точку М(x3,y3) имеет вид:

(x-x3)/a=(y-y3)/b.

Добавлено через 4 минуты
Или это и есть над чем я сейчас парюсь?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   vec.X = dst.X - src.p.X
    vec.Y = dst.Y - src.p.Y
    ' ??????? ??????????
    siz = Sqr(vec.X * vec.X + vec.Y * vec.Y)
    ' ???? ?????????? ?????? ?????????? ?? ?????? ???? ??????????
    If siz < IncDist Then
        Caption = "??????"
        Exit Sub
    Else: Caption = ""
    End If
    ' ?????
    vec.X = vec.X / siz: vec.Y = vec.Y / siz
    ' ??????? ????
    ang = vec.X * src.d.X + vec.Y * src.d.Y
    ' ?????????? ???????????
    If (vec.X * src.d.Y - vec.Y * src.d.X)
Добавлено через 32 минуты
The trick, крутится) (вертится шар голубой, крутится вертится над головой.....)
Миниатюры
Как организовать движение объекта к цели  
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 13:11  [ТС]
чувсвую пипец себя плохо(((

Добавлено через 6 минут
The trick, , ну первое я же правильно сделал? Ты ничего не говоришь я и не знаю правильно делаю или нет.. Как перпендикуляр найти , а потом как понял нужно взять скалярное произведение перпендикуляра к вектору (x0 y0) -(xc,yc). Не молчи, добить уже эту задачу и отлеживаться .

Добавлено через 17 минут
The trick, да чего больше ничего не говоришь ? сижу просто экран обновляю уже пол часа(

Добавлено через 10 минут
кто понял, подскажите....

Добавлено через 41 минуту
включил режим невидимости и молчит(
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 14:03  [ТС]
The trick, с этой частью разобрался, а про перпендикуляр ничего не понял. если делать как у тебя , он крутится постоянно.
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
$vecX=$xc-$x0
$vecY=$yc-$y0
 
$abx=($xb-$x0) 
$aby=($yb-$y0)
$acx=($xc-$x0)
$acy=($yc-$y0)  
$skal_ab_ac=$abx*$acx+$aby*$acy
 
$rast=DIST($xc,$yc,$x0,$y0)
 
if($rast<$minras)
                  
goto(mkonec)
end_if
 
 
$ang=$vecx*$xb+$vecy*$yb
 
$vecX=$vecX/$rast
$vecY=$vecY/$rast
 
if(($vecX * $yb - $vecY * $xb )<0) )
     $t=1                  
KEYDOWN(#d)
WAITMS(50)                       
KEYup(#d)
 
    end_if
 
if(($vecX * $yb - $vecY * $xb )<0)
 $t=2                
KEYDOWN(#a)
WAITMS(50)                       
KEYup(#a)
    end_if
Миниатюры
Как организовать движение объекта к цели  
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 21:33  [ТС]
mkonec:[/VB]

Добавлено через 10 минут
Все сделал, но он почему то как будто точно не поворачивается(
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
//16711680
#ps2_keyboard
LCLICK(624,256)  // 15790320
     
$minras=10
$ugol=5 *3.14 / 180
$pov=round( 5*2350/360 ,0)
 
mmm: IF(iskeydown(1)=0)
 
IF(iskeydown(1)=1)
   $xc=$_xmouse
   $yc=$_ymouse
   goto(nnn)
END_IF
END_IF
goto(mmm)
nnn:
                         
    
mstart:
   
m1:
GETSCREEN
IF_PIXEL_IN(241,35, 1037,717, 255 )
$x0=$_return1
$y0=$_return2
// move($_return1, $_return2)
WAITMS(50)
 
else
KEYDOWN(#A)
WAITMS(500)
KEYUP(#A)
$=1
goto(m1)
END_IF
GETSCREEN
WAITMS(50)
 
IF_PIXEL_IN(241,35, 1037,717, 16711680)
$xb=$_return1
$yb=$_return2
// move($_return1, $_return2)
WAITMS(50)
else
KEYDOWN(#A)
WAITMS(500)
KEYUP(#A)
$=2
goto(m1)
END_IF                  
 
$vecX=$xc-$x0
$vecY=$yc-$y0
 
$abx=($xb-$x0) 
$aby=($yb-$y0)
$acx=($xc-$x0)
$acy=($yc-$y0)  
$skal_ab_ac=$abx*$acx+$aby*$acy
 
$vectornoe= $abx*$acy+$acx*$aby
 
$rast=DIST($xc,$yc,$x0,$y0)
 
if($rast<$minras)                  
goto(mkonec)
end_if
 
 
$ang=$vecx*$xb+$vecy*$yb
 
print($t)
 
 
 
   print("VVVVV   ",$vectornoe)
if(($vectornoe )<0) )
                    
KEYDOWN(#a)
WAITMS(5)                       
KEYup(#a)
    end_if
if(($vectornoe )>0)
 
                     
KEYDOWN(#d)
WAITMS(5)                       
KEYup(#d)
    end_if  
 
 
   print($skal_ab_ac)
// if ($skal_ab_ac>0)
 
//KEYDOWN(#w)
//WAITMS(50)
//KEYup(#w)
//end_if
WAITMS(50)
                                                    
goto(mstart)
 
mkonec:
 
 
halt
Добавлено через 19 минут
Он странно идет, хотя точку я ему задал выше левее. http://youtu.be/gKciUERMOnU.
вот лог 15:04:11 uslovie levo/pravo -56
15:04:11 uslovie vpered 376
15:04:12 uslovie levo/pravo 45
15:04:12 uslovie vpered 275
15:04:12 uslovie levo/pravo -54
15:04:13 uslovie vpered 306
15:04:13 uslovie levo/pravo 9
15:04:13 uslovie vpered 369
15:04:14 uslovie levo/pravo -52
15:04:14 uslovie vpered 300
15:04:14 uslovie levo/pravo 10
15:04:15 uslovie vpered 362
15:04:15 uslovie levo/pravo -7
15:04:15 uslovie vpered 251
15:04:16 uslovie levo/pravo 12
15:04:16 uslovie vpered 348
15:04:16 uslovie levo/pravo -5
15:04:16 uslovie vpered 241
15:04:17 uslovie levo/pravo 54
15:04:17 uslovie vpered 306
15:04:17 uslovie levo/pravo -4
15:04:18 uslovie vpered 236
15:04:18 uslovie levo/pravo 45
15:04:18 uslovie vpered 250
15:04:19 uslovie levo/pravo -4
15:04:19 uslovie vpered 236
15:04:19 uslovie levo/pravo 13
15:04:20 uslovie vpered 341
15:04:20 uslovie levo/pravo -84
15:04:20 uslovie vpered 316
15:04:21 uslovie levo/pravo 21
15:04:21 uslovie vpered 333
15:04:21 uslovie levo/pravo -34
15:04:22 uslovie vpered 262
15:04:22 uslovie levo/pravo 22
15:04:22 uslovie vpered 326
15:04:23 uslovie levo/pravo -24
15:04:23 uslovie vpered 309
15:04:23 uslovie levo/pravo 23
15:04:23 uslovie vpered 319
15:04:24 uslovie levo/pravo -32
15:04:24 uslovie vpered 256
15:04:25 uslovie levo/pravo 24
15:04:25 uslovie vpered 312
15:04:25 uslovie levo/pravo 15
15:04:25 uslovie vpered 260
15:04:26 uslovie levo/pravo -38
15:04:26 uslovie vpered 200

Добавлено через 1 минуту
то положительное векторное произведение, то отрицательное.

Добавлено через 15 минут
Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока; Блин что за?

Добавлено через 1 минуту
И никто больше не заходит, как будто не знают(

Добавлено через 4 минуты
The trick, напиши пожалуйста по
Цитата Сообщение от smsgeorge Посмотреть сообщение
Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления игрока;
формулы и как использовать нормировку, вообщем с условием двигаться вперед я разобрался, а вот с остальным не очень( Поэтапно напиши или нарисуй пожалуйста. Вообщем интересует как получить условие влево/вправо.

Добавлено через 32 минуты
The trick, как долго я тебя ждал, ура! Я так и сижу за компом, сопли текут, знобило , было 37.3 , теперь не знобит, но чувствую, что горячий.

Добавлено через 33 минуты
Кароче я решил делать через угол, так как The trick, все равно не помогает, приходится блин вымаливать из него инфу, смотри, когда нибудь тебе тоже нужна будет помощь, что нормально объяснили и ты также будешь как я ! Модератор такого великого сайта, а обычный люд за говно считает. Ну что поделать, если я ненавижу геометрию и в школе не любил, вот алгебру любил, а синусы косинусы не переносил на дух, 3 дня я вымаливаю из The trick, то , что можно подробно расписать за 10 минут. ТЫ в общем написал, но так думаешь легко. Приходится сидеть и мониторить сайт и так 3 дня. А еще и с температурой по 38. Совести у тебя нет, а мне уже противно тебя о чем то спрашивать становится. Может ты и модератор, но ты этого не заслуживаешь!
 Комментарий модератора 
Нарушение правил 6.9:
"проявления неуважения к администрации форума и ее действиям недопустимы, и могут повлечь применение санкций, вплоть до бана."
Вам ни кто не обязан помогать, ни модераторы, ни обычные пользователи, тем более, что ваши вопросы к VB6 относятся косвенно.
Больше предупреждений не будет!

Это чисто мое мнение, я могу и ошибаться и дело не в том помоги ли нет, он помогал много, но его отношение к людям, просто омерзительно! Вообщем буду делать через угол. Сейчас другой вопрос , как сделать максимальную скорость , чтобы из моей программы записывались углы в тхт файл, а уже от туда VB6 брал инфу , вычислял и заносил в тхт. (раньше программа VB6 все делала быстро, как бы открывался ехе , вычислял и сам закрывался) ?

Добавлено через 2 минуты
А сейчас подумал, может и не стоит его закрывать, это же лишние секунды. сделать либо через таймер, либо есть ли функция , которая узнает поменялись ли данные ну и начинает действовать.

Добавлено через 4 часа 53 минуты
Сделал через углы Апострофф, тебе вообще огромная благодарность, через углы работает даже лучше , чем у The trick . Спасибо всем. Alex77755, и другим The trick, что хоть, когда то отписывался, а вообще я лучше промолчу. 3 дня....... Ладно, ребята , спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2014, 21:33

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
130
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru