2016-08-06 12 views
0

Cylinderをいくつかの3D点で開始し、他の3D点で終了するとします。JavaFX 3D:定義済みの開始点と終了点にシリンダーを変換

私が知る限り、これを行う方法は、2点間のユークリッド距離を計算し、同じ長さの円柱を作成することです。次に、シリンダーは平行移動して回転させる必要があります。シリンダーは実際に始点で始まり、終点で終わります。

私はこれらの変換に混乱し、シリンダーを正しい場所に置くことに成功しません。

あなたは関数の実装のいくつかのコードスニペットを共有してくださいでした:私は解決策を見つけたよう

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

答えて

1

は自分自身に答えます。

はここで働く素敵なスニペットが見つかりました:ここhttp://netzwerg.ch/blog/2015/03/22/javafx-3d-line/

がコードである、それは簡単です:

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; 
} 
関連する問題