如何调整由两点定义的线的大小,使其受C++的最大线长度的约束
How to resize a line, defined by two points, so that its constrained by a maximum line length in C++
我在研究如何将一行限制为最大长度时遇到了一些困难。假设我有两个SDL_Point的p1
和p2
来构造一条线,p2
由鼠标位置决定,p1
是恒定的。我有一个计算线长度的函数,并检查该长度是否大于最大长度。如果它大于最大长度,我想缩放线条,以便角度相同,效果将是缩放p2
以满足最大长度标准。
我正在使用此方法计算距离:
double Foo::CalculateDistance(SDL_Point p1, SDL_Point p2)
{
int xd = p2.x- p1.x;
int yd = p2.y - p1.y;
return sqrt(xd*xd + yd*yd);
}
SDL_Point Foo::CalculatePosition(int mousePosX, int mousePosY)
{
SDL_Point p2;
p2.x = mousePosX;
p2.y = mousePosY;
lineLength = (int) CalculateDistance(p2,p1);
if (lineLength > MAX_LINE_LENGTH)
{
// Buggy code
p2.x /= lineLength;
p2.y /= lineLength;
}
return p2;
}
对此的任何指导将不胜感激!
您应该使用 2d 向量类。这将使事情变得更加简单。
然后像这样使用它
p2 = p1 + (p2 - p1).normalized() * MAX_LINE_LENGTH;
或无载体
p2.x = p1.x + (p2.x - p1.x) / lineLength * MAX_LINE_LENGTH;
p2.y = p1.y + (p2.y - p1.y) / lineLength * MAX_LINE_LENGTH;
和一个完整的示例
SDL_Point p2;
p2.x = mousePosX;
p2.y = mousePosY;
lineLength = (int) CalculateDistance(p2,p1);
if (lineLength > MAX_LINE_LENGTH)
{
p2.x = p1.x + (p2.x - p1.x) / lineLength * MAX_LINE_LENGTH;
p2.y = p1.y + (p2.y - p1.y) / lineLength * MAX_LINE_LENGTH;
}
return p2;
相关文章:
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- C++中"长整"的确切最大值是多少?
- 求长向量的最小值和最大值
- 转换非常长的字符串文本C++以满足最大行长策略
- 最大线程数 - 如何确定C++线程是否并行运行?
- C++的最大线程数
- 为什么当我使用长整整型和整型作为参数时,最大函数会出现错误
- 在C 多线程应用程序中,设置了并发线程的最大数量
- std ::线程最大并发线程
- STD :: async的最大线程数量是多少,将异步创建和执行
- 在给定某些约束的情况下,求出元素之间的最大距离
- 需要精确的线程睡眠.最大1ms错误
- 程序编译并执行,但输出的不合理大的数字作为最大值.如何显示长双倍?
- 如何调整由两点定义的线的大小,使其受C++的最大线长度的约束
- MSVC 2012 RC std::线程实现中的最大参数数
- 用户模式计划程序线程的最大数量
- 乘以两个大于长双的最大限制的数字
- 在c++中进行线程处理,在2d数组中找到最大的条目
- 通过最大跳跃长度数组的最短路径
- 可以创建的最大线程数是多少?在多线程时需要考虑系统配置吗?