|
Основной форум Сюда все проблемы связанные с программированием. |
24.01.2010, 22:55
|
#31
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Ошибка синтаксиса.
2odd: Кстати, погуглив понял, что из того самого 2DGraphics возможно установить только два типа линий: SOLID и DOTED. Как я понимаю, SOLID это толщина в 3 пикселя, причем скорее всего рисуют в самом классе по тому же Брезенхему, как plot(x-1,y); plot (x,y); plot(x+1,y) - особо не заморачиваясь. Могу ошибаться конечно, но что-то мне подсказывает....
Есть еще отдельные библиотеки(или как там в яве), писаные сторонними товарищами, но это примерно те-же костыли, как и у меня. Возможно чуть быстрее ибо нативно на яве. Но принцип такой-же.
Также начиная с MIDP2.0 есть вроде-как стандартная функция рисования закрашенных треугольников (UPD: ну да, например здесь уже пробегала в lib_gfx например). Можно мою процедуру fillrectangle заменить на нее, на MIDP2 будет наверно быстрее, с другой стороны на MIDP1 работать не будет вообще.
|
(Offline)
|
|
25.01.2010, 03:08
|
#32
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Отрисовка толстых линий
MIDP 1.0 скоро уйдет в историю как и старые профили мидлетов (не даром я их назвал "Под старину"), так что не стоит особо бояться проблем с совместимостью.
|
(Offline)
|
|
25.01.2010, 22:36
|
#33
|
Оператор ЭВМ
Регистрация: 07.12.2009
Адрес: Мытищи
Сообщений: 44
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Ошибка синтаксиса.
Вот вроде бы рабочий мой вариант:
Сообщение от VotapilD
program sincos;
var x1,x2,y1,y2,a,b,c,cos,sin:real;
i:integer;
begin
x1:=0;
y1:=0;
x2:=100;
y2:=100;
a:=abs(trunc(x1-x2));//катит у
b:=abs(trunc(y1-y2));//катит х
c:=sqrt(a*a+b*b);//гипотенуза
cos:=b/c;//cosB
sin:=a/c;//sinB угол против стороны У
for i:=-2 to 2 do begin
x1:=x1+cos+i;//
y1:=y1+sin+i;// Переносим точки, так
x2:=x2+cos+i;// чтобы линия была параллельна...
y2:=y2+sin+i;//
DrawLine(trunc(x1),trunc(y1),trunc(x2),trunc(y2));
end;
repaint;
delay(3000);
|
Скрещение моей формулы и Tronixa в чём ошипка... Не могу найти.
АПД:Нужна библиотека Lib_gfx; А вообще, вот Все библиотеки(Вообще все)!
Последний раз редактировалось VotapilD, 26.01.2010 в 00:20.
|
(Offline)
|
|
26.01.2010, 04:50
|
#34
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Отрисовка толстых линий
Как доведете до блеска алгоритм, я его тогда реализую на Java в виде отдельной библиотеки. Без проблем. Или добавлю функцию рисования толстых линий в Lib_gfx.
|
(Offline)
|
|
26.01.2010, 08:23
|
#35
|
Оператор ЭВМ
Регистрация: 07.12.2009
Адрес: Мытищи
Сообщений: 44
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Отрисовка толстых линий
Сегодня... Где-то в 2 часа ночи я закончил алгоритм. Вроде всё верно, фуууф...
ОНО РАБОТАЕТ!
Сообщение от odd
Как доведете до блеска алгоритм, я его тогда реализую на Java в виде отдельной библиотеки. Без проблем. Или добавлю функцию рисования толстых линий в Lib_gfx.
|
Посмотри, ещё сильней сжать алгоритм можно?)
|
(Offline)
|
|
26.01.2010, 13:36
|
#36
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Отрисовка толстых линий
Нет, нормально. Больше вряд ли сожмется. Можно конвертировать в либу.
Ждите обновления библиотеки LIb_gfx
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.01.2010, 15:08
|
#37
|
Оператор ЭВМ
Регистрация: 07.12.2009
Адрес: Мытищи
Сообщений: 44
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Отрисовка толстых линий
Можно ещё сильнее!(наверное)! xa,ya,xb и тд не надо делать реалом(Ставим Инт)!
после нахождения син и кос:
a:=abs(trunc(x1-x2));//катит у
b:=abs(trunc(y1-y2));//катит х
c:=(sqrt(a*a+b*b));//гипотенуза
cos:=(b/c);//cosB
sin:=(a/c);//sinB угол против стороны У
if (x2-x1<0)xor(y1-y2<0) then cos:=-cos;
cosadd:=trunc(cos*h);
sinadd:=trunc(sin*h);
xa:=x1+cosadd;//
ya:=y1+sinadd;// Переносим точки, так
xb:=x2+cosadd;// чтобы линия была параллельна...
...
...
FillTriangle(xa,ya,xb,yb,xc,yc);
FillTriangle(xc,yc,xd,yd,xb,yb);
end;
Но там баги с округлением(((
|
(Offline)
|
|
27.01.2010, 19:35
|
#38
|
Знающий
Регистрация: 25.10.2009
Сообщений: 338
Написано 53 полезных сообщений (для 61 пользователей)
|
Ответ: Отрисовка толстых линий
odd сделал скачай последьнюю версию lib_gfx
|
(Offline)
|
|
27.01.2010, 22:12
|
#39
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Отрисовка толстых линий
Сообщение от im_zorg
odd сделал скачай последьнюю версию lib_gfx
|
Я там ещё немного упростил алгоритм. Попробуете округление, вроде бы получилось неплохо.
|
(Offline)
|
|
27.01.2010, 22:39
|
#40
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Отрисовка толстых линий
Сообщение от odd
Я там ещё немного упростил алгоритм. Попробуете округление, вроде бы получилось неплохо.
|
Оооо, посмотрел исходник - значит моя формула верна все-таки. А я думал кривая она... Кстати, думаю там нужно вызывать M.G.filltriangle, а не filltriangle - а то получается функция drawline вызывает функцию filltriangle, которая вызывает filltriangle...
|
(Offline)
|
|
20.11.2011, 23:08
|
#41
|
AnyKey`щик
Регистрация: 08.11.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Отрисовка толстых линий
А есть готовое решение для рисования линий со сглаженными краями (antialiasing)?
|
(Offline)
|
|
27.02.2012, 18:13
|
#42
|
Оператор ЭВМ
Регистрация: 26.02.2012
Сообщений: 26
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Отрисовка толстых линий
Сообщение от impersonalis
рисуйте окружности. Радиус R - толщина линии. Над расстояниям - надо подумать..
|
садомазохизм
Однако надо не линиями пользоваться, а векторами(вершинами).
Если есть угол, то нужно его найти функцией atan2(y,x)! Вроде в MidletPascal 3.3 есть такая возможность. Так, ну ещё надо сделать вид центрирования это четырёхугольника(из векторов) - надо половину необходимой ширины отделить на каждую вершину разрывая углы на -90 и 90... Сложно.
Последний раз редактировалось ViNT, 27.02.2012 в 20:57.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:21.
|