Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2007, 22:29   #1
valwin
 
Регистрация: 04.12.2006
Сообщений: 0
По умолчанию Поворот маленького примитива на канве

Мне нужно отображать на канве маленький треугольник,повёрнутый под различным углом(от 0 до 360 градусов), обсчёт точек
я делаю с помощью матрицы поворота. Но при этом конечно работаю с вещественными числами,но когда привожу полученные координаты вершин треугольника к целочисленным значениям(в пикселях - к экранным координатам),использую round, то получаю очень кривые результаты За счёт округления! Подскажите, как мне решить эту проблему, может дело в пространственном разрешении канвы, ну там как в фотошопе - ppi - кол-во точек на дюйм???
Буду очень благодарен!!!
valwin вне форума Ответить с цитированием
Старый 31.01.2007, 22:39   #2
Softovick
Пользователь
 
Аватар для Softovick
 
Регистрация: 22.01.2007
Сообщений: 52
По умолчанию

Ну так это издержки пикселей.... А вообще то у формы в Delphi есть PixelsPerInch - это как раз то самое количество точек надюйм.... может оно?
И кстати, может и ошибаюсь, но можно работать с целыми числами при работе с матрицами...
Delphi & LMD & RXLib / VBA / Windows / Linux...
Softovick вне форума Ответить с цитированием
Старый 31.01.2007, 22:49   #3
valwin
 
Регистрация: 04.12.2006
Сообщений: 0
По умолчанию

В матрице поворота - она 2x2 в ней синусы и косинусы, а на выходе от 0 до 1 - если даже выход растянуть в каком-то диапазоне - всё равно мне нужно получать маленькие значения Вот если бы повысить качество растра, то при больших числах я бы получал такой же по величине треугольник, а кол-во точек на дюм формы не действует - я пробовал!!!
valwin вне форума Ответить с цитированием
Старый 31.01.2007, 23:22   #4
NightmareZ
Пользователь
 
Аватар для NightmareZ
 
Регистрация: 01.01.2007
Сообщений: 52
По умолчанию

Цитата:
Сообщение от valwin Посмотреть сообщение
использую round
Насколько я помню, она может округлять как в большую, так и в меньшую сторону.
Попробуй trunc, floor или ceil.
NightmareZ вне форума Ответить с цитированием
Старый 01.02.2007, 01:44   #5
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию Посмотрел на одном форуме объясняли так...

Вопрос №3265 [01-08-00] >>>

Возможно, я не вполне четко сформулировал вопрос: при
рисовании линии в
1 пиксел (да и не только),
резудьтат получается с "зазубринками". Это особенно
характерно для линий
с очень большим или очень маленьким тангенсом угла наклона.
Однако при
работе со спец. графич. редакторами линии получаются гораздо
более
гладкими, особенно при печати. Вопрос в следующем: как
реализовать это в
Дельфи, как получить более точные координаты, чем целые и
т.д. Заранее
благодарен.

Ответов: 2


02-08-00 13:28
на экране нет нецелых координат. о то, что в графических пакетах
нету ступенек, достигается благодара так называемому антиалиайзингу.
для сглаживания углов используются полутона, глаз как бы обманывается.
если сделать скриншот и увеличить это место в том же редакторе, то все
станет предельно ясно.


на принтере другое дело. там просто очень маленький пиксел и ступеньки
глазом просто невидны.


теперь о том как бороться. нужно рисовать точку двумя пикселами,
суммарная яркость (темность (- равна яркости точки. для рисования
прямых существует модифицированный алгоритм брезенхама (чуть ли не
самим брезенхамом (-, но под рукой его к сожалению нет.
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 01.02.2007, 06:23   #6
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

алгоритм Брезенхейма бывает 4-х и 8-и связный.

но если координаты правильно посчитаны, для рисования линий
вполне достаточно стандартных средств ..
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 03.02.2007, 22:32   #7
valwin
 
Регистрация: 04.12.2006
Сообщений: 0
По умолчанию

Буду копать в сторону алгоритма Брозенхейма
И всё же расскажи поподробней, как иммитировать картинку примитива-тругольника,повёрнутого на N градусов так чтобы
глазу прятно было смотреть (ведь это 3 линии, соедин-е между собой, здесь уместен алгоритм Брезенхама?)
valwin вне форума Ответить с цитированием
Старый 04.02.2007, 03:34   #8
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

ИМХО - какой бы ни был там алгоритм, пиксели на экране ты меньше не сделаешь. Можешь конечно еще изменить разрешение экрана, и тогда точки станут меньше. А вообще заинтересовался этои темой и вот за 3 часа написал полноченную show-программку. Рассчеты - чисто геометрические, протисовка - стандартная для канвы. Выкладываю вместе с исходниками.
Вложения
Тип файла: rar Triangle Rotating.rar (161.8 Кб, 96 просмотров)
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование пирамиды на канве Eugene Общие вопросы Delphi 4 17.10.2013 17:27
Мерцание на Канве SERG1980 Мультимедиа в Delphi 3 30.04.2008 08:14
Поворот картинки delphin100 Мультимедиа в Delphi 5 14.04.2008 10:43
построение графика на Канве Chepa Общие вопросы Delphi 2 19.01.2007 22:59
как рисовать на канве битмапы учитывая прозрачность участков битмапа? Alar Общие вопросы Delphi 0 29.10.2006 23:06