2016-08-06 33 views
0

Angenommen, ich möchte eine Cylinder in einem 3D-Punkt beginnen und in einem anderen 3D-Punkt enden.JavaFX 3D: Zylinder zu definierten Start- und Endpunkten transformieren

Soweit ich weiß, besteht die Möglichkeit darin, den euklidischen Abstand zwischen den 2 Punkten zu berechnen und einen Zylinder gleicher Länge zu erzeugen. Dann sollte der Zylinder übersetzt und gedreht werden, so dass er wirklich am Anfangspunkt beginnt und am Endpunkt endet.

Ich bin mit dieser Transformation verwirrt und es gelingt mir nicht, den Zylinder an seinem richtigen Platz zu platzieren.

void createCylinder(Group group, double p1X, double p1Y, double p1Z, 
           double p2X, double p2Y, double p2Z) 

Antwort

1

Answering mich als ich eine Lösung gefunden habe:

Könnten Sie bitte einige Code-Schnipsel Implementierung der Funktion teilen.

Gefunden eine Arbeits schön Schnipsel hier: http://netzwerg.ch/blog/2015/03/22/javafx-3d-line/

Hier ist der Code ist, dann ist es einfach:

public Cylinder createConnection(Point3D origin, Point3D target) { 
    Point3D yAxis = new Point3D(0, 1, 0); 
    Point3D diff = target.subtract(origin); 
    double height = diff.magnitude(); 

    Point3D mid = target.midpoint(origin); 
    Translate moveToMidpoint = new Translate(mid.getX(), mid.getY(), mid.getZ()); 

    Point3D axisOfRotation = diff.crossProduct(yAxis); 
    double angle = Math.acos(diff.normalize().dotProduct(yAxis)); 
    Rotate rotateAroundCenter = new Rotate(-Math.toDegrees(angle), axisOfRotation); 

    Cylinder line = new Cylinder(1, height); 

    line.getTransforms().addAll(moveToMidpoint, rotateAroundCenter); 

    return line; 
}