come tradurre un oggetto grafico da un punto all'altro senza modificarlo?
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);
}
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