Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 19.04.2011, 15:06   #1
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию линия

вообщем есть функция рисующая линию
delphi Код:
procedure TLinePainter.PaintLine; var   i,path:integer;   v:real;   x,y:integer;   begin i:=abs(Start.X - Finish.X); path:=abs(Start.Y - Finish.Y); if path<i then path:=i; if path=0 then exit; for i:=0 to path do begin v:=(i / path); x:=Start.x + Round((Finish.x - Start.x) * v); y:=Start.y + Round((Finish.y - Start.y) * v); Form.Scene.Canvas.Pixels[x,y]:=clBlack; end; end;

первая линия на рисунке - нарисованая этой функцией, а вторая - так как надо нарисовать.
проще гря надо рисовать линию которая не может по-диагонали двигатся
Миниатюры
Нажмите на изображение для увеличения
Название: линия.JPG
Просмотров: 21
Размер:	12.5 Кб
ID:	2021  
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 19.04.2011, 16:33   #2
Местный
 
Регистрация: 11.03.2008
Сообщений: 529
Сказал Спасибо: 10
Имеет 111 спасибок в 71 сообщенях
Xa4ik пока неопределено
По умолчанию

так заарисовуются углы: (исправлено)
Код:
if (x<>x1) and (y<y1) then  Form.Scene.Canvas.Pixels[x-1,y]:=clBlack;
if (x<>x1) and (y>y1) then  Form.Scene.Canvas.Pixels[x+1,y]:=clBlack;
if (y<>y1) and (x<x1) then  Form.Scene.Canvas.Pixels[x,y+1]:=clBlack;
if (y<>y1) and (x>x1) then  Form.Scene.Canvas.Pixels[x,y-1]:=clBlack;
Form.Scene.Canvas.Pixels[x,y]:=clBlack;
x1:=x;
y1:=y;

Последний раз редактировалось Xa4ik, 19.04.2011 в 17:09.
Xa4ik вне форума   Ответить с цитированием
Старый 19.04.2011, 16:40   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от supernewbie Посмотреть сообщение
надо рисовать линию которая не может по-диагонали двигатся
что бы это могло означать
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 19.04.2011, 16:45   #4
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Тебе это именно для рисования, или все таки имеет отношение к поиску пути?)))

Цитата:
Сообщение от Xa4ik Посмотреть сообщение
Вторая в 2 пикселя толищиной, первая в 1.
думаю так:
Код:
Form.Scene.Canvas.Pixels[x,y]:=clBlack;
Form.Scene.Canvas.Pixels[x+1,y+1]:=clBlack;
сомнительно... Внимательно посмотри на рисунок, если именно 1 в 1 как у него... то на втором рисунке точка(3,5) должна быть в (4,4), если толщиной в 2 пикселя строить...

Если это тупо рисование пути (и ничего больше), то там только попиксельно (или извратиться с поиском прямых отрезков параллельно осям коодинат)
Aries вне форума   Ответить с цитированием
Старый 19.04.2011, 17:22   #5
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

Цитата:
Сообщение от Aries Посмотреть сообщение
Тебе это именно для рисования, или все таки имеет отношение к поиску пути?)))


сомнительно... Внимательно посмотри на рисунок, если именно 1 в 1 как у него... то на втором рисунке точка(3,5) должна быть в (4,4), если толщиной в 2 пикселя строить...

Если это тупо рисование пути (и ничего больше), то там только попиксельно (или извратиться с поиском прямых отрезков параллельно осям коодинат)
мне надо проверять, если то одной точки до второй точки можно провести прямую и на этом отрезке нет препятствий - удаляем вторую точку и так со всеми, короче из массива точек отобрать только нужные
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 19.04.2011, 18:43   #6
Местный
 
Аватар для Nickers
 
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Nickers пока неопределено
По умолчанию

supernewbie, а что ты конструируешь такое? А то у тебя постоянно геометрические впросы, аж интересно...
(Если ответ: "Иди ёбни ломату дерьма убейся", то я пойму)
__________________
Пишу что думаю, но ничего не знаю...
[LameGuard|Скрипты l2phx]
Nickers вне форума   Ответить с цитированием
Старый 19.04.2011, 18:53   #7
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

дык алгоритм пути по геодате, сам путь есть в виду координат, надо отрезать лишние точки, чтобы посылать мув то локейшен только в точки в которые можно провести прямую линию и на ней не будет препятствий, для этого сначала эту прямую линию надо провести)

Добавлено через 2 минуты
памагите пасаны
__________________
Начало.

Последний раз редактировалось supernewbie, 19.04.2011 в 18:53. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием
Старый 19.04.2011, 19:07   #8
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

он боитса что диагональная линия пути проскочит между двумя такимиже диагональным пикселами геодаты как я понимаю) и получитса типа как итти можно.

а ты попробуй рисавать еще 1 линию вплотную к этой со сдвигом в один пиксель. если обе линии проходят то вперед, пока в мою светлую голову не приходит ничего другова ))
__________________
читернуть бы ништяг
mira вне форума   Ответить с цитированием
Старый 19.04.2011, 19:23   #9
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от supernewbie Посмотреть сообщение
дык алгоритм пути по геодате, сам путь есть в виду координат, надо отрезать лишние точки, чтобы посылать мув то локейшен только в точки в которые можно провести прямую линию и на ней не будет препятствий, для этого сначала эту прямую линию надо провести)

Добавлено через 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. Причина: Добавлено сообщение
Aries вне форума   Ответить с цитированием
Старый 19.04.2011, 19:26   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

mira, значит голова твоя ещё не вся на стороне света)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 00:12.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!