Math 把一条线变成矩形

Math 把一条线变成矩形,math,graphics,vector,Math,Graphics,Vector,我有一种在两点之间画一条线的方法。这很好,但现在我想把这条线做成一个矩形 我怎样才能得到每个直线点左右两侧的点,使其成为一个我可以绘制的矩形 这就好像我需要以某种方式找出如何通过编程获得垂直线……drawRect(x,y,w,h) tl=(x,y) tr=(x+w,y) br=(x+w,y+h) bl=(x,y+h)既然您在使用OpenGL标记时提出了这个问题,我假设您希望得到一个接近OpenGL的解决方案 正如你所知,你有两个点组成一条线。我们把它们叫做x1,y1和x2,y2 我们还假设x1,

我有一种在两点之间画一条线的方法。这很好,但现在我想把这条线做成一个矩形

我怎样才能得到每个直线点左右两侧的点,使其成为一个我可以绘制的矩形

这就好像我需要以某种方式找出如何通过编程获得垂直线……

drawRect(x,y,w,h)

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

既然您在使用OpenGL标记时提出了这个问题,我假设您希望得到一个接近OpenGL的解决方案

正如你所知,你有两个点组成一条线。我们把它们叫做x1,y1和x2,y2

我们还假设x1,y1是左上角点,x2,y2是右下角点

要绘制的4个点将是[您需要保持顺序,以便用GL_线制作一个矩形)


我猜你基本上想要粗线条?让我们假设线条由两点指定
(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
,等等)转换为
gldrawerelements
。您还必须将四边形转换为两个三角形


最后一件事,我有点累了,不确定生成的四边形是逆时针方向还是顺时针方向,所以当您尝试此操作时,请旋转背面消隐(
glDisable(GL_CULL)
)注意,IBM已经获得专利了!这是疯狂的……FAT行应该是免费的。我可能在这里解释了这个问题。这条线在矩形的中间。所以想象一个长方形,一条线把它切成两半,而不是对角线,我必须用(Dy)替换(-Dy)。。我想那是因为你有例如“y0+py”而不是“y0-py”。@ChrisJJ是对的,我试图修正答案,但编辑被拒绝。更改
glVertex2f
方法的“x”参数的符号以匹配“y”参数的符号。
glVertex2f(x0+px,y0+py);glVertex2f(x1+px,y1+py);glVertex2f(x1-px,y1-py)“;glVertex2f(x0-px,y0-py);
@Ryan拒绝的原因是什么?@ChrisJJ”这篇编辑是针对文章作者的,作为编辑毫无意义。它应该是作为评论或回答来写的。“它以3比2被否决。我不知道为什么修复损坏的代码“毫无意义”。我只是再次尝试编辑它。”。
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();