Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ещё раз о столкновении [Delphi, Windows]


Страницы:   1 2

Xandr ©   (2006-02-25 20:31:00) 

суть:

есть непроходимые тайлы их нужно заменить линиями.
есть существа, их нужно заменить кругами.

вот в чём проблема: как лучше организовать замену, и САМОЕ главное - как проверить пересеклись ли окружность и кривая?

ЗЫ к математике не отправлять, уравнения прямых и окружностей я знаю, и умею решать системы уравнений. (правда на бумаге)


Xandr   (2006-03-03 12:31:00) [1]

вот: webfile.ru/840296 (~192K)

у меня там 2 окружности. одной управляет польз-тель, другая статичная (её можно передвигать "толкая" управляемой.

Все вроде хорошо, но только иногда возникают ситуации, когда неуправляемая окружность наталкивается на линию, управляемая "наезжает" на неё.

никак не пойму в чём дело. хелп если не лень.


Xandr   (2006-03-02 18:04:00) [2]

Вооот, а теперь не подскажете ли, алгоритм коллизий окружности и прямоугольника?


Xandr   (2006-03-02 17:11:00) [3]

Удалено модератором


XProger   (2006-03-01 22:02:00) [4]

да


Xandr   (2006-03-01 21:25:00) [5]

а по поводу [26]?


XProger   (2006-03-01 21:19:00) [6]

Типа :)


Xandr   (2006-03-01 21:13:00) [7]

кстати извиняюсь за фамильярничество, если это вдруг кого задело!

по поводу [25]:
насколько я понял это что - то типа отталкивающего поля получается, да?


Xandr   (2006-03-01 21:07:00) [8]

XProger,
а нормализовать это что типа этого:

Result.X := с.X / Lenght;
Result.Y := с.Y / Lenght;   (?)

Помоему у тебя же и подсмотрел...


XProger   (2006-03-01 20:53:00) [9]

Можно иначе. Проводим вектор (V) от точки отрезка до центра окружности. Находим его длину (R). Если она меньше Radius окружности - идём дальше. Нормализуем его (V -> N). Затем производим сдвиг центра окружности на N * (Radius - R). Не исключены случаи, когда окружность будет "колбасить" в определённых ситуациях.


Xandr   (2006-03-01 20:31:00) [10]

вот родился из коленки алгоритм:
-опускаем от прямой, содержащей отрезок, перпендикуляр на точу направления. (вектор а)
-новое направление = положение круга + вектор ист. направления + вектор а.

вот вопросы:
  1.будет ли сие работать?
  2.Ну НАВЕРНЯКА уже есть готовые алгоритмы решения этой задачи (или нет?)
  3.Можно ли зделать проще?


XProger   (2006-03-01 19:41:00) [11]

Пересечение точки с окружностью, а куда отталкивать - нарисуй на листочке - поймёшь (связано с направлением скорости перемещения окружности)


Xandr   (2006-03-01 19:31:00) [12]

ну, я опять не то сказал...
пишу ночью, вот и туплю :)

с коллизиями всё как раз в порядке.
дело в другом: мне нужно чтобы окружность при столкновении с отрезком, продолжала двигаться вдоль него в направлении, наиболее близком к указываемой точке. При столкновении с самим отрезком, я это реализовал (вычитанием из вектора направления одну из его состовляющих, перпендикулярную отрезку {**}).  :)

проблема возникла с концами отрезка :)))

т.е. если окружность находится напротив конца отрезка,  а вектор направления походит ~ вдоль него, то такой алгоритм (**) не работает! :(


XProger   (2006-02-28 21:42:00) [13]

XProger ©   (25.02.06 21:35) [3]

Найди расстояние от центра окружности до прямой, если меньше радиуса окружности - пересечение.
http://algolist.manual.ru/maths/geom/distance/pointline.php


Xandr   (2006-02-28 19:57:00) [14]

угу.
уже сам допёр.
но всё равно спасибо.

Блин.
вот тут пытаюсь написать простейшую CAD систему (для движка), запарился на самом простом: колизии отрезка с окружностью. (корее всего опять перемудрил там чё-то)

есть у кого нибудь ссылочки, где можно почитать по этому поводу что-нибудь (хотябы общие принципы)?

если это важно то "игра" - изометрическая проэ(е?)кция.


XProger   (2006-02-28 16:43:00) [15]

dx := lin[i + 1].x - lin[i].x;
dy := lin[i + 1].y - lin[i].y;
moveto(lin[i].x, lin[i].y);
lineto(lin[i].x + dx, lin[i].y);
lineto(lin[i].x + dx, lin[i].y + dy); // lineto(lin[i + 1].x, lin[i + 1].y);


Xandr   (2006-02-27 19:43:00) [16]


> Перпендикуляр к ветору = (-Y, X)


вот у меня так:

...
lin: array[0...10] of TPoint;
...
dx:=lin[i+1].x-lin[i].x;
dy:=lin[i+1].y-lin[i].y;
moveto(lin[i].x,lin[i].y);
lineto(lin[i+1].x,lin[i+1].y);
lineto(-dy,dx);


и такую фигню мне рисуют! :)
что не так?


A22   (2006-02-27 19:11:00) [17]

концы гипотенузы - A и B, неизвестная точка - T.
длины катетов - a, b:

a*a = (T.x - A.x) + (T.y - A.y)
b*b = (B.x - T.x) + (B.y - T.y)

два уравнения, два неизвестных

а вообще: "как отсечь от вектора одну из его состовляющих, перпендикулярную к.л. отрезку?"
то формулу для перпендикулярного уже указали = (-y,x), соответственно по "к.л." отрезку строим перпендикулярный и убираем его составляющую из исходного (вычитаем)


Xandr   (2006-02-27 16:51:00) [18]

Э...

любой вектор можно разложить на сумму 2х перпендикулярных (причём они могут быть и не параллельны осям координат). так вот, отсечь значит: найти составляющий вектор параллельный данному отрезку.

если перефразировать, то:
даны координаты конечных точек гипотенузы и длинны катетов. Найти координаты третьей точки треугольника.


XProger   (2006-02-26 21:59:00) [19]

Перпендикуляр к ветору = (-Y, X)
Что значит отсечь?


Xandr   (2006-02-26 21:22:00) [20]

Математика...

как отсечь от вектора одну из его состовляющих, перпендикулярную к.л. отрезку?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо