qt - 在任意宽度的两点之间绘制矩形

标签 qt opengl math 2d

当用户在触摸屏上滑动手指时,我试图在两个(2D)点之间画一条线。为此,我计划在上一次触摸更新的 X 和 Y 与最新触摸更新的 X 和 Y 之间的每次触摸更新上绘制一个矩形。当用户在屏幕上滑动手指时,这应该创建一条连续的实线。但是,我也希望这条线具有任意宽度。我的问题是,我应该如何计算每个矩形(x1、y1、x2、y2)所需的坐标?

——

另外:如果有人有任何关于我如何将抗锯齿应用到这条线的信息,那将是一个巨大的帮助。

最佳答案

计算起点和终点之间的向量

V.X := Point2.X - Point1.X;
V.Y := Point2.Y - Point1.Y;

然后计算垂直于它(只需交换 X 和 Y 坐标)
P.X := V.Y; //Use separate variable otherwise you overwrite X coordinate here
P.Y := -V.X; //Flip the sign of either the X or Y (edit by adam.wulf)

将垂直线归一化
Length = sqrt(P.X * P.X + P.Y * P.Y); //Thats length of perpendicular
N.X = P.X / Length;
N.Y = P.Y / Length; //Now N is normalized perpendicular

通过添加归一化垂直并将其乘以所需宽度的一半来计算形成矩形的 4 个点
R1.X := Point1.X + N.X * Width / 2;
R1.Y := Point1.Y + N.Y * Width / 2;
R2.X := Point1.X - N.X * Width / 2;
R2.Y := Point1.Y - N.Y * Width / 2;
R3.X := Point2.X + N.X * Width / 2;
R3.Y := Point2.Y + N.Y * Width / 2;
R4.X := Point2.X - N.X * Width / 2;
R4.Y := Point2.Y - N.Y * Width / 2;

使用这 4 个点绘制矩形。

这是图片:

Drawing rectangle between two points

编辑:回答评论:如果 X 和 Y 相同,那么这条线正好是对角线,垂直于对角线是对角线。归一化是一种使长度等于 1 的方法,因此本示例中的线宽将不取决于垂线长度(此处等于线长)。

关于qt - 在任意宽度的两点之间绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854043/

相关文章:

qt - 无法启动 qlocalserver

c++ - 未在此范围内声明的函数

c++ - 在虚拟文件系统中运行进程?

c++ - 忽略某些颜色 Alpha 混合

math - 板球物理,基本模拟

algorithm - kd-tree 是否适用于 4D 时空数据 (x,y,z,time)?

python - 是否可以使用 solvePnP 找到 4 个角点的实际位置?

python - pyQt QWidget 'flicker' 调整大小和重绘

c++ - 为什么必须同时使用 glBindBuffer 和 glBindBufferRange 在 OpenGL 中创建统一缓冲区?

java - 法线贴图错误