将一条线变成一个矩形

时间:2009-12-20 20:32:32

标签: math graphics vector

我有一种方法可以在两点之间划一条线。这很好用,但现在我想把这条线变成一个矩形。

如何获得每个线点左侧和右侧的点,使其成为我可以绘制的矩形?

几乎好像我需要以某种方式弄清楚如何以编程方式获得垂直线....

3 个答案:

答案 0 :(得分:15)

我猜你基本上想要胖线?让我们假设该行由两个点(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,我猜您必须将立即模式渲染(glBeginglEnd等)转换为glDrawElements。您还必须将四边形转换为两个三角形。

最后一件事,我有点累,不确定最终的四边形是逆时针还是顺时针方向,所以当你试一试(glDisable(GL_CULL))时背面剔除。

答案 1 :(得分:-1)

由于你已经用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)

答案 2 :(得分:-2)

的drawRect(X,Y,W,H)

tl =(x,y) tr =(x + w,y) br =(x + w,y + h) bl =(x,y + h)