превратите строку в прямоугольник

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

То, как я могу понять мысли на левой и правой стороне каждой строки, указывает для превращения его в прямоугольник, который я могу потянуть?

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

9
задан genpfault 14 December 2010 в 20:17
поделиться

3 ответа

Полагаю, вам в основном нужны жирные линии? Предположим, что линия задана двумя точками (x0, y0) и (x1, y1) , тогда мы имеем:

float dx = x1 - x0; //delta x
float dy = y1 - y0; //delta y
float linelength = sqrtf(dx * dx + dy * dy);
dx /= linelength;
dy /= linelength;
//Ok, (dx, dy) is now a unit vector pointing in the direction of the line
//A perpendicular vector is given by (-dy, dx)
const float thickness = 5.0f; //Some number
const float px = 0.5f * thickness * (-dy); //perpendicular vector with lenght thickness * 0.5
const float py = 0.5f * thickness * dx;
glBegin(GL_QUADS);
glVertex2f(x0 + px, y0 + py);
glVertex2f(x1 + px, y1 + py);
glVertex2f(x1 - px, y1 - py);
glVertex2f(x0 - px, y0 - py);
glEnd();

Поскольку вы используете OpenGL ES, я думаю, вы ' Мне нужно будет преобразовать рендеринг в немедленном режиме ( glBegin , glEnd и т.д.) в glDrawElements . Вам также придется преобразовать четырехугольник в два треугольника.

И последнее, я немного устал и не уверен, будет ли полученный четырехугольник повернут против часовой стрелки или по часовой стрелке, так что перестаньте отбрасывать заднюю поверхность, когда вы попробуете это ( glDisable (GL_CULL) ).

15
ответ дан 4 December 2019 в 19:34
поделиться

Поскольку вы задали этот вопрос с пометкой OpenGL, я предполагаю, что вам нужно решение, близкое к OpenGL.

Как вы знаете, у вас есть две точки, составляющие линию. Назовем их x1, y1 и x2, y2

Давайте также предположим, что x1, y1 - верхняя левая точка, а x2, y2 - нижняя правая.

Ваши 4 точки для построения будут [вам необходимо сохранить порядок, чтобы сделать прямоугольник с GL_LINES]

Height:y1-y1   
Width: x2-x1 

(x1, y1)
(x1+width, y1)
(x2, y2)
(x2-width, y2)
-1
ответ дан 4 December 2019 в 19:34
поделиться

drawRect (x, y, w, h)

tl = (x, y) тр = (х + ш, у) br = (х + ш, у + ч) bl = (x, y + h)

-2
ответ дан 4 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: