c - 将线段延伸特定距离

标签 c algorithm geometry

我正在尝试找到一种将线段延长特定距离的方法。例如,如果我有一条从 10,10 开始延伸到 20,13 的线段,并且我想将长度延长 3,我该如何计算新端点。在这个例子中,我可以通过 sqrt(a^2 +b^2) 得到长度 10.44 所以如果我想知道 10,10 的新端点长度为 13.44 什么是计算上最快的方法?我也知道坡度,但不知道在这种情况下是否对我有帮助。

最佳答案

您可以通过找到线段的单位 vector 并将其缩放到您想要的长度,然后使用该 vector 平移线段的终点来实现。假设您的线段端点是 AB 并且您想在端点 B(和 lenAB 是线段的长度)。

#include <math.h> // Needed for pow and sqrt.
struct Point
{
    double x;
    double y;
}

...

struct Point A, B, C;
double lenAB;

...

lenAB = sqrt(pow(A.x - B.x, 2.0) + pow(A.y - B.y, 2.0));
C.x = B.x + (B.x - A.x) / lenAB * length;
C.y = B.y + (B.y - A.y) / lenAB * length;

关于c - 将线段延伸特定距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740507/

相关文章:

JavaScript:检查一个数组是否是另一个数组的子序列(编写一个更快的朴素字符串搜索算法)

javascript - 在 JavaScript 中四舍五入到最接近的 5 的最紧凑、优雅和高效的方法是什么?

c++ - 非简单连接的二进制图像的周长

c++ - 三角形之间的相似性;双变量是一个痛苦的

c - 怀疑在printf中使用*++p

c - 哪个有更好的代码库可以借鉴: nginx or lighttpd?

c - 关于从 C 语言文件中读取字符串

algorithm - 给定三角网格顺时针排序点

c - OpenCV:从 harpia 导出源代码后: "too few arguments to function ‘cvHaarDetectObjects’“

c++ - move turtlebot_gazebo 的麻烦