gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:37:05 25 4
gpt4 key购买 nike

当用户在触摸屏上滑动手指时,我试图在两个(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com