дык алгоритм пути по геодате, сам путь есть в виду координат, надо отрезать лишние точки, чтобы посылать мув то локейшен только в точки в которые можно провести прямую линию и на ней не будет препятствий, для этого сначала эту прямую линию надо провести)
Добавлено через 2 минуты
памагите пасаны
Так тут все более чем просто... Путь не является прямой линией, поэтому мысль с построением линии без диагональных переходов - как-то бредова))
Суть такая:
Код:
coord A = CurrentCoord();
coord B = CurrentCoord();
while (A != EndPoint) {
bool Flag = false, ShiftX=false, ShiftY=false;
while (!Flag) {
if(A.x != B.x) ShiftX=true;
if(A.y != B.y) ShiftY=true;
if(B == EndPoint) Flag = true;
if (ShiftX && ShiftY) {
Flag = true;
B = PrevPoint();
}
else B = NextPoint();
}
moveto(B);
A = B;
}
эт если я правильно понял что тебе надо)
Т.е. мы строим прямую линии до ближайшего диагонального перехода, идем к нему, от него начинаем строить дальше и т.д.... Если нужно изначально все точки просто пробить, то вместо moveto(B) записывай себе куда-нить эту координату и все
Добавлено через 6 минут
Цитата:
Сообщение от mira
он боитса что диагональная линия пути проскочит между двумя такимиже диагональным пикселами геодаты как я понимаю) и получитса типа как итти можно.
нет, как я понял, у него путь готовый есть уже) просто ему нужно сделать координаты контрольных точек, чтоб не писать MoveTo на каждую точку пути)))
хотя мб я как всегда не допонял что-то))
А если ты прав, то это говорит о том, что выбранный алгоритм для поиска пути заведомо неверный, раз ищет не в 4 направления, а в 8)))
Последний раз редактировалось Aries, 19.04.2011 в 19:26.
Причина: Добавлено сообщение
у него путь готовый есть уже) просто ему нужно сделать координаты контрольных точек, чтоб не писать MoveTo на каждую точку пути)))
вот именно так, есть массив точек xyz пути, надо удалить лишние посредством провода прямых линий, а в геодате по диагонали нельзя двигатса
Добавлено через 1 минуту
Цитата:
Сообщение от mira
а ты попробуй рисавать еще 1 линию вплотную к этой со сдвигом в один пиксель. если обе линии проходят то вперед, пока в мою светлую голову не приходит ничего другова ))
но это хренова :\ так лишние точки будут задействованы и тупить всё будет
вот на рисунке - синие точки это все точки из массива точек пути, бордовым отмечено какие точки должны остатся путём провода линий и узнавания что можно валить нанапрямую
__________________ Начало.
Последний раз редактировалось supernewbie, 19.04.2011 в 19:39.
Причина: Добавлено сообщение
по логике от каждой бордовой точки можно провести к другой бордовой линию и не будет препятствия, примерно так
не, ну стоп...
Путь у тебя синим показан, не?
Как мы можем выбрать точки, которые буду соединены в обход пути?
ЗЫ сейчас кстати конечно вижу, что я тупо разделил на прямые отрезки, но которые по сути излишни местами... А раньше так путь и прокладывал, и ток глядя на твой рисунок осознал, что в случае клиента линейки, там путь во многих случаях и без доп обхода норм должен проложиться (надо будет по этому поводу подумать как следует)....
не, ну стоп...
Путь у тебя синим показан, не?
Как мы можем выбрать точки, которые буду соединены в обход пути?
ЗЫ сейчас кстати конечно вижу, что я тупо разделил на прямые отрезки, но которые по сути излишни местами... А раньше так путь и прокладывал, и ток глядя на твой рисунок осознал, что в случае клиента линейки, там путь во многих случаях и без доп обхода норм должен проложиться (надо будет по этому поводу подумать как следует)....
путь синим, по факту каждый пиксель=координата, надо оставить тока бордовые т.к. по ним буду посылать мув то локейшек епт) для этого надо провести *бучую линию и каждую координату линии проверить на наличие препятствий, если их нет - удаляем координату и так все координаты пока не останутся только одни бордовые, че тупишь))
короче, не напрягайся, просто скажи как нарисовать линию без диагональных точек *ля
и если примеры будут - пиши на дельфе их плз
__________________ Начало.
Последний раз редактировалось supernewbie, 19.04.2011 в 19:59.