0

如何找到与给定点相距特定距离的直线上的点。我正在用 C 编写这段代码,但我没有得到正确的答案..你能指导我做错什么吗?

我得到了 x1,y1,x2,y2 值和留下的距离。使用这些我可以找到斜率 m 和 y 截距也很好。现在,我需要在连接这两个点的直线上找到距离点 x1,y1 10 个单位的点。我似乎在这里出错了。这是我写的代码。

int x1 = node[n].currentCoordinates.xCoordinate;
int y1 = node[n].currentCoordinates.yCoordinate;
int x2 = node[n].destinationLocationCoordinates.xCoordinate;
int y2 = node[n].destinationLocationCoordinates.yCoordinate;

int distanceleft = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1);
distanceleft = sqrt(distanceleft);
printf("Distance left to cover is %d\n",distanceleft);
int m = (y2 - y1)/(x2 - x1); // slope.
int b = y1 - m * x1; //y-intercept


//find point on the line that is 10 units away from
//current coordinates on equation y = mx + b.
if(x2 > x1)
{
     printf("x2 is greater than x1\n");
     int tempx = 0;
     int tempy = 0;
     for(tempx = x1; tempx <= x2; tempx++)
     {
          tempy = y1 + (y2 - y1) * (tempx - x1)/(x2 - x1);
          printf("tempx = %d, tempy = %d\n",tempx,tempy);
          int distanceofthispoint = (tempy - y1) * (tempy - y1) + (tempx - x1) * (tempx - x1);
          distanceofthispoint = sqrt((int)distanceofthispoint);
          if(distanceofthispoint >= 10)
          {
               //found new points.
               node[n].currentCoordinates.xCoordinate = tempx;
               node[n].currentCoordinates.yCoordinate = tempy;
               node[n].TimeAtCurrentCoordinate = clock;
               printf("Found the point at the matching distance\n");
               break;
          }
     }
}
else
{
     printf("x2 is lesser than x1\n");
     int tempx = 0;
     int tempy = 0;
     for(tempx = x1; tempx >= x2; tempx--)
     {
          tempy = y1 + (y2 - y1) * (tempx - x1)/(x2 - x1);
          printf("tempx = %d, tempy = %d\n",tempx,tempy);
          int distanceofthispoint = (tempy - y1) * (tempy - y1) + (tempx - x1) * (tempx - x1);
          distanceofthispoint = sqrt((int)distanceofthispoint);
          if(distanceofthispoint >= 10)
          {
               //found new points.
               node[n].currentCoordinates.xCoordinate = tempx;
               node[n].currentCoordinates.yCoordinate = tempy;
               node[n].TimeAtCurrentCoordinate = clock;
               printf("Found the point at the matching distance\n");
               break;
          }
     }
}
printf("at time %f, (%d,%d) are the coordinates of node %d\n",clock,node[n].currentCoordinates.xCoordinate,node[n].currentCoordinates.yCoordinate,n);
4

2 回答 2

7

数学是这样的,我没有时间用 C 写东西。

你有一个观点(x1,y1)和另一个观点(x2,y2),当链接时它会给你一个片段。

因此,您有一个方向向量v=(xv, yv)wherexv=x2-x1yv=y2-y1

现在,您需要将此向量除以其范数,得到一个新向量:vector = v / sqrt(xv 2 + yv 2 )

现在,您只需将向量乘以您想要的点的距离添加到您的原点:

位置=(x原点,y原点)+距离×向量

我希望这有帮助!

于 2012-04-11T22:17:43.837 回答
0

或者更简单,

从斜坡找到角度

θ = arctan(y2-y1/x2-x1)

您可能希望根据斜率的分子和分母来修改 θ 的象限。然后你可以找到距离 (x1, y1) 距离为 d 的线上的任何点

x_new = x1 + d×cos(θ)
y_new = y1 + d×sin(θ)

在这种情况下,您有 d=10

于 2014-01-29T18:10:35.747 回答