![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как задать толщину линии 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]Есть разрешение: точки на дюйм. Остальное - побарабану.