ПрограммированиеФорумГрафика

Как правильно построить и залить ломанную линию любой ширины

Страницы: 1 2 Следующая »
#0
6:35, 25 июля 2013

Привет всем! Есть полилиния, состоящая из 3 точек P0, P1, P2(изображены красными точками). Необходимо найти 2 точки на стыке линий, чтобы потом, наверное, триангуляцией разбить на треугольники и залить цветом как линию, которая изображена ниже. Нормали точек P0 и P2, самое простое, я нашёл, а остальные 2 точки как-то не знаю как. Всё это необходимо для рисования линии любой ширины. Помогите.
polyline | Как правильно построить и залить ломанную линию любой ширины

#1
9:34, 25 июля 2013

они лежат на биссектрисе угла (Р0 Р1 Р2). а дальше напр нижнюю можно найти как пересечение прямой параллельной (РО Р1) и проходящей ниже нее (это будет нижняя граница первого сегмента ломаной на рис) и той самой биссектрисы. другой путь записать уравнения расстояния от точки до прямой, точки ??? должны лежать на расстоянии ширина/2 от каждой из прямых (РО Р1) и (Р1 Р2). будет 2 ур-ния - и 2 решения для каждой из точек ??? (каждое решение - пара ХУ)

#2
9:35, 25 июля 2013

триангуляция не нужна. как только найдете искомые точки - можете составить фигуру из 2 залитых четырехугольников

#3
15:09, 25 июля 2013

Нужные точки как уже сказали на биссектрисе лежат. Но появилась еще одна идейка, как их найти.. Можно из P1 провести окружность нужного радиуса (ширины линии). Точки пересечения окружности с биссектрисой, и будут искомыми точками.

#4
17:29, 25 июля 2013

ialexbr
нет, будет ломаная разной толщины для разных углов

#5
19:07, 25 июля 2013

cArmaggedon
Ну да, точно, не подумал

#6
3:41, 27 июля 2013

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

#7
15:53, 27 июля 2013

Ребят, ну как же все-таки упростить подход, чтобы не проверять пересечение с биссектрисой ?

#8
17:19, 27 июля 2013

можно попробовать найти векторы нормали этих двух сторон, сделать их длины шириной в пол-линии и две нужные точки будут точка угла + две нормали и точка угла - две нормали
ну, только нужно строго определять направление нормалей: какое "+", а какое "-"

#9
19:33, 27 июля 2013

cArmaggedon, можете обозначить векторы нормали двух сторон, а то я не совсем понял?
normals | Как правильно построить и залить ломанную линию любой ширины
В данном случае я просто вывел нормали и вершины нормалей точек p0, p1, p2.

#10
22:18, 27 июля 2013

тысячу раз обсуждалось,
нарисовал правильно, дальше два варианта:
- либо искать пересечение n0n1 и n2n3 (поулчится большой вынос для острых углов)
- либо добавить еще два триса на стыке (если рисуешь стрипом, даже добавлять ничего не придется, просто запихивай вершины в буфер)

второй вариант будет плох если ты собираешся использовать прозрачность линии, зато самый простой

#11
1:54, 28 июля 2013

mitroxa, я знаю все эти способы - они у меня реализованы, просто я хочу оптимизировать, чтобы без проверок на пересечения линий, стрипов и тд. находить точки. Ищу способ самый оптимальный подход отличный от тех, которые у меня уже реализованы.

#12
2:29, 28 июля 2013

http://www.gamedev.ru/code/forum/?id=139524#m0

#13
7:26, 29 июля 2013

Спасибо всем, каждый реально дал неплохой совет, испробовал практически все предложенные варианты! Но, в конце-концов, остановился на варианте как у AndryBlack. Осталось придумать как исправить вырождение линии на стыке, когда углы слишком маленькие.
miter_line | Как правильно построить и залить ломанную линию любой ширины

#14
10:32, 29 июля 2013

2pizza
> спасибо, сделал при помощи биссектрисы, но кода как-то много

Ты что-то сделал не так.
Видимо ты стал делать хрень в лоб на тригонометрии, где вас только учат...

n1,n2 - единичные нормали к отрезкам
sum = n1+n2;
return 2*sum/(sum*sum)

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.