Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как задать толщину линии TPen.Width равную 1 мм?(продожение темы)


Dmitry S ©   (2008-09-22 17:36:00) 

Я понимаю, что пиксел может быть не квадратный! Я потому и спрашиваю, что писать в TPen.Width.
Понятно дело, если линия горизонтальная - <количество точек на мм по вертикали>, если вертикальная - <количество точек на мм по горизонтали> писать нужно. А как быть, если линия под углом 30 градусов? А если это еще и кривая, что тогда?


Дмитрий Белькевич   (2008-09-23 02:35:00) [1]

>Забыл насчет "медленно", а что быстро?

MoveTo, если, конечно, аппаратное ускорение есть. Иначе - всё равно, да.

>:) чудно. Однако ответа я так и не получил.

Ответов ты получил множество.

Если нужен кусок кода - есть job.ru и аналоги.

В любом случае, для общего случая не получится.


Германн   (2008-09-23 01:28:00) [2]


> Дмитрий С   (23.09.08 01:14) [14]
>
>
> > Германн ©   (23.09.08 00:29) [13]
>
> :) чудно. Однако ответа я так и не получил.
>

А ты спрашивал? Или Dmitry S ©?
Вы оба получили кучу ответов, в которых ясно было сказано, что свойство TPen.Width в общем случае не гарантирует толщину линии! И не может её гарантировать!
Придуриваешься? Или нет?


Дмитрий С   (2008-09-23 01:14:00) [3]


> Германн ©   (23.09.08 00:29) [13]

:) чудно. Однако ответа я так и не получил.


Германн   (2008-09-23 00:29:00) [4]

Имхо, на данный момент подобные дискуссии о ширине карандаша в миллиметрах бессмыслены.
Особенно в отношении сабжа! Сей сабж есть "восстановление закрытой ветки". А судя по высказываниям автора в этой ветке, он не понял ничего из закрытой, не хочет понимать, да в добавок злится.


Anatoly Podgoretsky   (2008-09-22 23:35:00) [5]

> Дмитрий Белькевич  (22.09.2008 22:15:10)  [10]

Естественно, что Line это прямая, а любая кривая это набор прямых.
LineDDA избавляет от расчета следующей точки, что делается с помощью оптимального алгоритма (Брезенхема).
А расчитаная точка - это уже пиксель любой формы и размера.


Anatoly Podgoretsky   (2008-09-22 23:35:00) [6]

> Дмитрий Белькевич  (22.09.2008 22:15:10)  [10]

Забыл насчет "медленно", а что быстро?


Дмитрий Белькевич   (2008-09-22 22:15:00) [7]

Брезенхем тут слабо поможет - отрезки прямых можно и виндой рисовать, только толщину постоянно пересчитывать (что придётся и LineDDA делать, как я понимаю), а кривые оно всё равно не посчитает.

Опять же - медленно...


DVM   (2008-09-22 22:12:00) [8]

Мне кажется, в GDI+ уже все это реализовано.


Anatoly Podgoretsky   (2008-09-22 20:56:00) [9]

> Дмитрий Белькевич  (22.09.2008 20:12:06)  [6]

Алгоритмы Брезенхема, в частности реализованый в Виндоус LineDDA - идеально подходит для этой цели, если не используются операции из Виндовс. Также ширина и высота "пикселя" важна для сглаживания линий


Дмитрий Белькевич   (2008-09-22 20:20:00) [10]

Формулу готовую без бумаги не напишу, могу только логику представить.

В случае линий, очевидно, нужно учитывать DPI и по X и по Y, беря какую-то часть от каждой координаты с помощью коэффициентов. В сумме коэфиициентов получая единицу. Коэффициенты зависят от угла наклона линии - в какую сторону линия наклонена больше, от той координаты будет больше и браться.

Дальше думай сам...


Дмитрий Белькевич   (2008-09-22 20:12:00) [11]

Математика тебе поможет, в частности тригонометрия. Это в случае линий, если нужны кривые - то, думается, никак - только руками эти кривые рисовать поточечно или разбивая на достаточно короткие отрезки.


Leonid Troyanovsky   (2008-09-22 19:42:00) [12]


> Dmitry S ©   (22.09.08 17:36)  

> под углом 30 градусов? А если это еще и кривая, что тогда?

Ну, тут все просто: тридцатиградусный угловой пиксель.
Или кривой, если не свезло.

--
Regards, LVT.


{RASkov}   (2008-09-22 18:56:00) [13]

> [0] Dmitry S ©   (22.09.08 17:36)
> Я понимаю, что пиксел может быть не квадратный!

Нет, значит не понимаешь :(
Ибо width - это одно значение и оно либо столько, либо столько, или либо столько, но никак не столько и столько. :)
Вот научишь перо вращать при рисовании линии, тогда да, можно прямоугольным пикселем рисовать ровномерной толщины линию в любом направлении...
Подсказка: попробуй LineDDA использовать


Поросенок Винни-Пух   (2008-09-22 18:21:00) [14]

Есть разрешение по-горизонтали, есть по-вертикали.

А разрешения по диагонали нет.
Значит в кассу.


Dmitry S   (2008-09-22 18:08:00) [15]


> Есть разрешение: точки на дюйм. Остальное - побарабану.

Есть разрешение по-горизонтали, есть по-вертикали.
А если точки на кв. дюйм, но тут это не в кассу.


KilkennyCat   (2008-09-22 17:58:00) [16]

Есть разрешение: точки на дюйм. Остальное - побарабану.


Наверх

Титульная страница Поиск, карта сайта Написать письмо