2012-01-11 16 views
0

私は数学的な道(sin波)をある座標位置から別の座標位置に翻訳しようとしています。しかし、私は愚かか何かが間違っています。グラフィックスオブジェクトを変更せずにあるポイントから別のポイントに変換する方法はありますか?

私は80と100は、私は私のオブジェクトを翻訳したいために、新しい座標位置しているこの

// Translate 
    for (int i=0; i < 300; i++) { 
     coordinatesX[i] = coordinatesX[i] + (80 - coordinatesX[i]); 
     coordinatesY[i] = coordinatesY[i] + (100 - coordinatesY[i]); 
    } 

をしようと試みました。私はこの

// Translate 
    for (int i=0; i < 300; i++) { 
     coordinatesX[i] = coordinatesX[i] + 80; 
     coordinatesY[i] = coordinatesY[i] + 100; 
    } 

をしようと試みた。しかし、すべては、部分的に波がある角度を持っている場合にのみ機能または動作しているようです ? 私は学校で数学が欠けていたと思います。私はAndEngineを使ってJavaでプログラミングしています。このelementar関数にいくつかのショートカットがあるかもしれません。

全体コード:

// define newpath 
    float[] coordinatesX = new float[300]; 
    float[] coordinatesY = new float[300]; 
    // wave 
    for (int i=0; i<300; i++){ 
     coordinatesX[i] = i; 
     coordinatesY[i] = (float)(20 * (Math.sin((-0.10 * coordinatesX[i])))); 
     System.out.println(coordinatesX[i]); 
     System.out.println(coordinatesY[i]); 
     //coordinatesX[i] = coordinatesX[i] + centerX; 
     //coordinatesY[i] = coordinatesX[i]+centerY; 
    } 


    // ROtate 
    for (int i=0; i<300; i++){ 
     coordinatesX[i] = ((coordinatesX[i] * (float)Math.cos(-10)) - (coordinatesY[i] * (float)Math.sin(-10))) + coordinatesX[i]; 
     coordinatesY[i] = (coordinatesX[i] * (float)Math.sin(-10)) + (coordinatesY[i] * (float)Math.cos(-10)) + coordinatesY[i]; 
    } 

    // Translate 
    for (int i=0; i < 300; i++) { 
     coordinatesX[i] = coordinatesX[i]+ (200); 
     coordinatesY[i] = coordinatesY[i] + (300); 
    } 

答えて

1

はここで正弦波を変換する方法の例です。あなたの必要に応じてそれを適応させてください。

package math; 

import java.awt.geom.Point2D; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Curve translation example 
* User: Michael 
* Date: 1/10/12 
* Time: 7:56 PM 
*/ 
public class TranslationExample { 
    public static void main(String[] args) { 
     double length = 1.0; 
     int numPoints = 20;  
     List<Point2D.Double> curve = getCurve(length, numPoints); 
     System.out.println("before translation"); 
     for (Point2D.Double point : curve) { 
      System.out.printf("%10.6f %10.6f\n", point.getX(), point.getY()); 
     } 
     Point2D.Double delta = new Point2D.Double(3.0, 4.0); 
     curve = translateCurve(curve, delta); 
     System.out.println("after translation"); 
     for (Point2D.Double point : curve) { 
      System.out.printf("%10.6f %10.6f\n", point.getX(), point.getY()); 
     } 
    } 

    private static List<Point2D.Double> translateCurve(List<Point2D.Double> curve, Point2D.Double delta) { 
     List<Point2D.Double> translated = new ArrayList<Point2D.Double>(); 

     for (Point2D.Double point : curve) { 
      translated.add(new Point2D.Double(point.getX()+delta.getX(), point.getY()+delta.getY())); 
     } 
     return translated; 
    } 

    private static List<Point2D.Double> getCurve(double length, int numPoints) { 
     List<Point2D.Double> points = new ArrayList<Point2D.Double>(); 
     if ((length > 0.0) && (numPoints > 0)) { 
      double dx = length/numPoints; 
      double x = 0.0; 
      for (int i = 0; i < (numPoints - 1); ++i) { 
       points.add(new Point2D.Double(x, Math.sin(2.0*Math.PI*x/length))); 
       x += dx; 
      } 
      points.add(new Point2D.Double(length, Math.sin(2.0*Math.PI))); 
     } 

     return points; 
    } 
} 
+0

ああ、ありがとうございます。しかし、角度が45度を超えると、波の歪みがあるようです。回転機能にも間違いがありますか? –

+0

「45以上」?私はそれが何を意味するのか分かりません。 "回転"?ここで回転はありません。翻訳だけです。行列の乗算を使用してローテーションを行います(例:http://en.wikipedia.org/wiki/Rotation_matrix)。私はあなたのアップヴォートをあなたのおかげで好むでしょう。 – duffymo

関連する問題