0

特定の点から特定の距離にある直線上の点を見つける方法を教えてください。私はこのコードを C で書いていますが、正しい答えが得られません。

x1、y1、x2、y2 の値と左の距離を取得します。これらを使用して、勾配 m と y 切片もうまく見つけることができます。ここで、点 x1、y1 から 10 単位離れたこれら 2 つの点を結ぶ直線上の点を見つける必要があります。ここで間違っているようです。これが私が書いたコードです。

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-x1とがありyv=y2-y1ます。

ここで、このベクトルをそのノルムで割る必要があります。新しいベクトルを取得します: vector = v / sqrt(xv 2 + yv 2 ) .

ここで、ポイントが必要な距離を乗じたベクトルを原点に追加するだけです。

位置 = (x 原点、y 原点) + 距離 × ベクトル

これが役立つことを願っています!

于 2012-04-11T22:17:43.837 に答える