|
|
|||||
Регистрация: Mar 2011
Сообщений: 53
|
узнать кто первый в гонке
делаю гонки вид сверху, трасса круговая, можно представить просто кольцо, участников максимум 4, может кто подскажет, или направит на путь истинный как определить кто на каком месте едет, ну в плане кто сейчас едет первым, кто вторым и т.д., единственное что приходит в голову это превратить трассу в зебру и при каждом пересечении линии проверять в каком порядке участники пересекли линию, еще была мысль с координатами но развить ее не удается, нужно наверное разделить трассу на четыре участка и в зависимости от участка проверять координаты, надеюсь у кого то был опыт подобного, либо найдется человек который сможет предложит лучший вариант, заранее благодарен
ув. artcraft предложил использовать линии безье, хотел бы спросить, правильно ли я понял, мне нужно с помощью линии безье повторить трассу, а затем проверять по координатам "машины" участника в гонке, где именно находится на этой линии он, что бы узнать расстаяние от начала линии до данных координат? возмодно у кого нить есть еще варианты спасибо |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Цитата:
Пусть (0,0) в центре трассы, тогда a=arctg(y/x)+PI*k/2, k=0 ели x>0 & y>0; 1 if x<0 & y>0; 2 if x<0 & y<0; 3 if x>0 & y<0, движение по часовой (кажется). А лучше наоборот - полярные переводить в декартовы. |
|
|||||
Можно поставить чекпоинты на повороты. Определять позицию можно (только что придумал) так:
Машинка проехала допустим второй чекпоинт, теперь можно определить дистанцию машинки до 2 чекпоинта и дистанцию машинки до 3-его чекпоинта. Потом сложить эти дистанции и определить процент прохождения между чекпоинтами. Если между чекпоинтами дорога будет в виде дуги, ничего страшного, это мало повлияет на результат.
__________________
Гоночка |
|
|||||
Регистрация: Mar 2011
Сообщений: 53
|
Silicium, что то я не совсем понял о чем вы, не могли бы вы поподробнее
Alex Lexcuk, тогда придется слишком ного ставить чекпоинтов, по другому Цитата:
|
|
|||||
bookin я вам писал в теме которую закрыли, можно разметить трассу линиями невидимыми, пересекающими перпендикулярно дорогу и просто хиттестить их машинкой, только надо проверить чтобы все линии были пройдены иначе срезана трассы.
Последний раз редактировалось MXPain; 11.12.2011 в 08:17. |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Ну вот http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B0%D1%82
А чек-поинты и линии - ... |
|
|||||
Цитата:
трассу любой формы (точнее разделительную полосу) можно представить как набор отрезков кривой безье а машины как точки на плоскости, для вычисления проделанного машиной пути, нужно 1) опустить перпендикуляр на ближайший отрезок крривой и узнать координату проекции машины на кривую 2) высчитать расстояние от начала кривой до проекции машины однако, если вам не нужна трасса любой формы, а только идеальный круг, то проще определять проделанный путь высчитывая длину дуги, это просто сделать, зная координаты центра трассы, координаты машины и координаты начала трассы
__________________
Хороший отдых - половина работы. |
|
|||||
Регистрация: Mar 2011
Сообщений: 53
|
MXPain, к сожалению не хотелось бы использовать снова проверку на столкновения у меня довольно много огромных bitmapdata с которыми довольно много идет проверок на столкновения, хотелось бы что то менее нагруженное и эффективное
Silicium, к сожалению мой маленький мозг никак не может совладать с информацией и правильно ее переварить, возможно вы можете привести пример, был бы благодарен artcraft, я примерно так себе и представил, насколько я понял в той библиотеке на которую вы дали ссылку имеется функция которая определяет ближайшую точку от объекта до линии безье, возможно она подойдет вместо перпендикуляра, не радует правда что сайт bezbe.ru не работает =( да и хотел бы подчеркнуть что трасса не ровный круг, кольцо, как я не точно выразился надо было добавить "к примеру", имеет искривления Добавлено через 1 час 27 минут Silicium, попытался сделать то что вы предлагаете но видемо из-за того что я несовсем понимаю что должно в итоге получится либо из-за того что где то что то не досматриваю но результативность мала при движении про100 два в массиве меняются местами постоянно function whereCarInTrace():void{ var masterTaskList:Array = new Array(); //masterTaskList.splice(0); var myUserCar:Number=pointObjectInTrace(car.x,car.y); masterTaskList[myUserCar]=[game.session.myUser.id,"muCar"]; var j=0; for(var i in cars){ if(i!='user'&&cars[i]){ var carFrends:Number=pointObjectInTrace(cars[i].x,cars[i].y) masterTaskList[carFrends]=[i,"CarFrend"+j]; } j++; } masterTaskList.sort(); for(var k in masterTaskList){ trace(masterTaskList[k][1]); } trace('------'); } function pointObjectInTrace(x,y):Number{ var k=(x>0&&y>0?0: (x<0&&y>0?1: (x<0&&y<0?2: (x>0&&y<0?3:0)))); var pointCar:Number; pointCar=Math.atan(y/x)+Math.PI*k/2; return pointCar } |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Цитата:
Да, и вот еще что: мой алгоритм действителен только на одном круге трассы! А вот для того, чтобы круги считать, надо на старте чекпоинт поставить, чтобы он круги отсчитывал. Тогда к значению угла надо еще 2PI*nприбавлять. ИЛИ! делать наоборот: от полярных переходить к декартовым. Это не сложно, но будет больше вычислений, т-к вектор ускорения тоже надо будет перевести в полярные коры. Еще вопрос: ширина трассы имеет значение? |
|
|||||
Цитата:
Цитата:
__________________
Хороший отдых - половина работы. |
Часовой пояс GMT +4, время: 21:42. |
|
« Предыдущая тема | Следующая тема » |
|
|