2012-02-18 15 views
0

どのようにして特定の距離からポイントのx、y座標を得ることができますか?特定の距離からx、y座標を取得する方法

ので

public static Location2D DistanceToXY(Location2D current, Directions dir, int steps) { 
      ushort x = current.X; 
      ushort y = current.Y; 

      for (int i = 0; i < steps; i++) { 
       switch (dir) { 
        case Directions.North: 
         y--; 
         break; 
        case Directions.South: 
         y++; 
         break; 
        case Directions.East: 
         x++; 
         break; 
        case Directions.West: 
         x--; 
         break; 
        case Directions.NorthWest: 
         x--; 
         y--; 
         break; 
        case Directions.SouthWest: 
         x--; 
         y++; 
         break; 
        case Directions.NorthEast: 
         x++; 
         y--; 
         break; 
        case Directions.SouthEast: 
         x++; 
         x++; 
         break; 
       } 
      } 
      return new Location2D(x, y); 
     } 

がここでやっているものですが、右ですか?

+6

あなたは –

+0

これはあなたが旅行する方向に依存しないでしょう歩くどの方向に依存しますか? – Oleksi

+0

あなたはどの場所を利用できるのですか?もしそうなら、それを再帰的に行うことができます。 – Ovilia

答えて

0

私はあなたが一般的な解決策を探していると仮定しています。他の人が指摘するように、欠落した入力として方向性が必要です。基本的に方向と大きさ(この場合は10)を使用し、これらの極座標をデカルト座標に変換します。次に、X + Xoffset = Xnew、Y + Yoffset = Ynewの座標を加算します。

変換の詳細はこちらです: http://www.mathsisfun.com/polar-cartesian-coordinates.html

編集:あなたのコードを掲載した後、答えはノーです。 NorthWest、SouthWest、NorthEast、SouthEastのケースは正しくありません。これらの場合、1.41(aprox)ピクセル移動します。あなたは段階的にパズルを解こうとするべきではありません。極座標の数学を使用して、合計オフセットを合計し、次に最も近い整数に丸めます。

相続人は、ソリューションに単純化された擬似コードのMOD:

public static Location2D DistanceToXY(Location2D current, Directions dir, int steps) { 
     ushort x = current.X; 
     ushort y = current.Y; 

     switch (dir) { 
      case Directions.North: 
       y=y+steps; 
       break; 
      case Directions.South: 
       y=y-steps; 
       break; 
      case Directions.East: 
       x=x+steps; 
       break; 
      case Directions.West: 
       x=x-steps; 
       break; 
      case Directions.NorthWest: 
       float sqrt2 = 2^0.5 
       x=x+int((sqrt2 * steps) + 0.5); 
       y=y-int((sqrt2 * steps) + 0.5); 
       break; 
      case Directions.SouthWest: 
       x=x-int((sqrt2 * steps) + 0.5); 
       y=y-int((sqrt2 * steps) + 0.5); 
       break; 
      case Directions.NorthEast: 
       x=x+int((sqrt2 * steps) + 0.5); 
       y=y+int((sqrt2 * steps) + 0.5); 
       break; 
      case Directions.SouthEast: 
       x=x-int((sqrt2 * steps) + 0.5); 
       y=y+int((sqrt2 * steps) + 0.5); 
       break; 
     } 
     return new Location2D(x, y); 
    } 
+0

thnxさんのヘルプ^ _ ^ – Abanoub