2013-03-31 1 views
3

J'ai deux points que je veux connecter d'une manière spécifique - voir la première image. Je connais les coordonnées des quatre points. Je dois ensuite déplacer la forme entière vers les coordonnées [0, 0] et la faire pivoter, de sorte que les deux points principaux soient tous les deux sur l'axe des x (voir la deuxième image). Ensuite, je dois "serrer" la forme sur l'axe des 0 seulement de sorte que le dernier point a des coordonnées [0, 1] (voir la dernière image).Transformer une forme

problem illustration

Ma question est - comment puis-je calculer les coordonnées des deux points de moyen efficace en Java sans entrer dans les mathématiques d'analyse manuelle?

+0

Vous pouvez prier ou donner ce travail à un ami ... La rotation, la translation et la mise à l'échelle sont supportées par la plupart des moteurs d'interface et se réfèrent aux ... – Aubin

+0

@Aubin Bien sûr, je ne veux pas dessiner les coordonnées manquantes en utilisant des outils de transformation Java dont je n'ai pas connaissance (sans entrer dans la géométrie analytique). – kenor

+0

Programme réalisé, grâce à java.awt.geom. – Aubin

Répondre

2

java.awt.geom.AffineTransform peut être un point de démarrage.

Ce programme est appliqué les 3 transformations (dans l'ordre inverse):

import java.awt.geom.AffineTransform; 

public class TransRotScal { 

    public static void main(String[] args) { 
     double theta = Math.atan2(-15.0, 40.0); 
     AffineTransform trans = new AffineTransform(); // Identity 
     trans.scale(1/43.0, 1.0); 
     trans.rotate(theta); 
     trans.translate(-10, -20); 
     double[] in = { 
     10, 20, 
     10, 30, 
     50, 30, 
     50, 35 
     }; 
     double[] out = new double[in.length]; 
     trans.transform(in, 0, out, 0, in.length/2); 
     for(int ptNdx = 0; ptNdx < out.length; ptNdx += 2) { 
     System.out.printf("{%7.4f, %7.4f }\n", out[ptNdx], out[ptNdx+1]); 
     } 
    } 
} 

Sorties:

{ 0,0000, 0,0000 } 
{ 0,0817, 9,3633 } 
{ 0,9527, -4,6816 } 
{ 0,9935, 0,0000 } 

Pour donner cette réponse, je l'ai écrit un petit programme, mais je souhaite une plus simple un, et pour ce faire, je suis poster cette question: Affine transforms for graph, not for text and labels.

Questions connexes