Domanda

sto cercando per molte ore per tradurre un percorso matematico (un'onda peccato) da una posizione all'altra coordinate .. ma sia io sono stupido o qualcosa vada storto.

Ho provato questo

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

Dove 80 e 100 sono le nuove coordinate di posizione a cui voglio di tradurre il mio oggetto. Ho provato questo

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

Ma tutto sembra parzialmente lavoro o un lavoro solo se l'onda ha un certo angolo? Credo che mi mancava po 'di matematica a scuola. Sto programmando in Java utilizzando l'AndEngine. Può essere ci sono alcune scorciatoie per questa funzione elementare.

L'intero codice:

    // 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);
    }
È stato utile?

Soluzione

Ecco un esempio di come tradurre una sinusoide. Adattarlo in base alle proprie esigenze.

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top