Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 给定起点和终点以及距离,沿直线计算一个点_C++_C_Math_Graphics_Vector - Fatal编程技术网

C++ 给定起点和终点以及距离,沿直线计算一个点

C++ 给定起点和终点以及距离,沿直线计算一个点,c++,c,math,graphics,vector,C++,C,Math,Graphics,Vector,寻找计算直线上的点的最快方法 距离直线端点的给定距离: void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py) { //calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2 *px = ??? *py = ??? } 谢谢你的回复,不,这不是家庭作业,

寻找计算直线上的点的最快方法 距离直线端点的给定距离:

void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py) 
{
    //calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2
    *px = ???
    *py = ???
}  
谢谢你的回复,不,这不是家庭作业,只是一些黑客行为 我正常的专业领域

这是下面建议的功能。离工作还不远。如果我 在曲面的右上90度部分,每5度计算一次点 一个圆作为起点,调用下面的函数,圆心为x2,y2,距离为4。终点完全错误。它们位于中心的下方和右侧,长度与中心点一样长。有人有什么建议吗

void calculate_line_point(int x1, int y1, int x2, int y2, int distance)
{

//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2

  double vx = x2 - x1; // x vector
  double vy = y2 - y1; // y vector

  double mag = sqrt(vx*vx + vy*vy); // length

  vx /= mag;
  vy /= mag;

// calculate the new vector, which is x2y2 + vxvy * (mag + distance).

  px = (int) ( (double) x2 + vx * (mag + (double)distance) );
  py = (int) ( (double) y2 + vy * (mag + (double)distance) );
}


我找到了有关stackoverflow的解决方案,但还不完全理解,有人能澄清一下吗?

我认为这属于MathOverflow,但我会回答,因为这是你的第一篇帖子。 首先计算从x1y1到x2y2的向量:

float vx = x2 - x1;
float vy = y2 - y1;
然后计算长度:

float mag = sqrt(vx*vx + vy*vy);
将向量规格化为单位长度:

vx /= mag;
vy /= mag;
最后计算新向量,即x2y2+vxvy*(磁距+距离)

您可以忽略一些与距离/mag相乘的计算。

这些公式是错误的:

正确的方程式为:


汤姆

也许你应该使用浮动/双精度,因为你会得到舍入误差。这可能是个问题,卢卡斯说的。还有,你可能在我打字时读了我的帖子。如果x1y1是原点,则需要x1y1+vxvy*(磁距+距离),而不是x2y2。也就是说,从原点开始,使用从x1y1到x2y2的方向,移动到x2y2的距离加上额外的距离。虽然我想你可能想重新表述你的问题。你到底想做什么?现在的问题似乎更像是一个中间问题。不幸的是,mathoverflow太势利了,不能接受这种问题;它确实属于这里。抱歉,如果它太简单了,伙计们,完全超出了我的能力范围。谢谢你的帮助,干得好。我曾经是一名教授,我学到的第一个也是最大的一课是,我认为简单的东西对别人来说并不简单。不管MathOverflow有什么优点,编写正确代码的任务实际上超出了MathOverflow员工的核心能力。我现在在MathOverflow上更加活跃(我在那里有大约3k的代表),但我也会继续回答数学问题。在我看来,这两个站点可以很好地互补。我认为这可能更简单:*px=(int)((float)x2+vx*距离))*py=(int)((浮点)y2+vy*距离);
*px = (int)((float)x1 + vx * (mag + distance));
*py = (int)((float)y1 + vy * (mag + distance));
px = (int) ( (double) x2 + vx * (mag + (double)distance) );

py = (int) ( (double) y2 + vy * (mag + (double)distance) );
px = (int) ( (double) x2 + vx * (double)distance );

py = (int) ( (double) y2 + vy * (double)distance );