Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
Dmitry S ©   (2008-09-22 17:36) [0]

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


 
KilkennyCat ©   (2008-09-22 17:58) [1]

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


 
Dmitry S ©   (2008-09-22 18:08) [2]


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

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


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

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

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


 
{RASkov} ©   (2008-09-22 18:56) [4]

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

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


 
Leonid Troyanovsky ©   (2008-09-22 19:42) [5]


> Dmitry S ©   (22.09.08 17:36)  

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

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

--
Regards, LVT.


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

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2008-09-22 20:56) [8]

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

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


 
DVM ©   (2008-09-22 22:12) [9]

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


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

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

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


 
Anatoly Podgoretsky ©   (2008-09-22 23:35) [11]

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

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


 
Anatoly Podgoretsky ©   (2008-09-22 23:35) [12]

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

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


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

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


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


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

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


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


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

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


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

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

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

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

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

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
2-1253022337
Drowsy
2009-09-15 17:45
2009.11.01
Откат транзакции в InterBase.


2-1252648119
Гость
2009-09-11 09:48
2009.11.01
Объявление переменной


11-1207160811
Lotos
2008-04-02 22:26
2009.11.01
Изменение размеров TBitmap


2-1252299766
TopTop
2009-09-07 09:02
2009.11.01
Странное поведение делфи


1-1222009517
Дмитрий С
2008-09-21 19:05
2009.11.01
Можно ли самому задать высоту текста для TFont





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский