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

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

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

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

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

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

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

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

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

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

Добавлено через 2 минуты
The trick, Для определения справа/слева - скалярное произведение вектора направления на цель и перпендикуляра вектора направления Это и есть тот вектор (0 -1)?))
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
26.09.2014, 10:13 123
Цитата Сообщение от 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  [ТС] 124
выходит четыре условия:
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  [ТС] 125
The trick, Давай чтобы не запутаться , по шагам. Это я верно сделал? Чтобы я мог идти дальше и не зацикливаться?
Миниатюры
Как организовать движение объекта к цели  
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
26.09.2014, 10:44 126
smsgeorge, ты не те вектора берешь. Ты хоть думай немного. Зачем ты взял эти 2 вектора?
Ты работаешь только с AB и AC.
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
26.09.2014, 11:43  [ТС] 127
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  [ТС] 128
чувсвую пипец себя плохо(((

Добавлено через 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  [ТС] 129
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  [ТС] 130
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
26.09.2014, 21:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2014, 21:33
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
130
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru