ともさんのHP >プロブラミング >自作JavaLibrary >JavaFXで3D曲線

JavaFXで3D曲線

JavaFXを用いると Java 楽天 で3Dオブジェクトを表示することができます。
しかし表示できるオブジェクトは限られていてメッシュ、立方体、円筒(シリンダー)、球の四つしかありません。
3Dの線を表示する必要ができたのですが、3Dラインは用意されていないのでこまってしまいました。
しかし諦めるわけにもいかないので、簡易的ですがうまく3DLINEを表現できる方法を考えました。

広告


シリンダーで線を表現する

JavaFX楽天 で様々な3Dオブジェクトを表示させるのであれば、OpenGLを使うのが良いと思います。
しかし、私はOpenGLをさわった経験がなく、検索しても情報が少ないのです。
そこで、使えるものを利用して簡易的に3DLINEを表現することにしました。
単純に言うと細いシリンダーを使ってあたかも3Dの線を引いたかのように表現します。
立方体を細長くして線のように見せることもできるのですが、今回はシリンダーをもちいました。
こんな感じで表示できます。
JavaFXで3D-LINE


サンプルコード

3Dの線を表示するサンプルコードは以下です。


package tomojavalib.mesh;

import javafx.geometry.Point3D;
import javafx.scene.shape.Cylinder;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;

/**3D線の代わりとなるシリンダーを作成する*/
public class ThreeDLine extends Cylinder{

public ThreeDLine(Point3D origin, Point3D target, double hankei ) {
super();
this.makeLine(origin, target , hankei );
}

public ThreeDLine(Cpoint corigin, Cpoint ctarget, double hankei ) {
super();
Point3D origin =new Point3D( corigin.d.x , corigin.d.y , corigin.d.z );
Point3D target =new Point3D( ctarget.d.x , ctarget.d.y , ctarget.d.z );
this.makeLine(origin, target , hankei );
}

public ThreeDLine(ThreeDimension corigin, ThreeDimension ctarget, double hankei ) {
super();
Point3D origin =new Point3D( corigin.x , corigin.y , corigin.z );
Point3D target =new Point3D( ctarget.x , ctarget.y , ctarget.z );
this.makeLine(origin, target , hankei );
}


private void makeLine(Point3D origin, Point3D target, double hankei ) {
    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);

this.setRadius( hankei );
this.setHeight(height);

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

}

線の始点と終点を与えてその間をまたぐシリンダーを作ります。
シリンダーは作ったそのままでは原点位置に置かれます。これを移動し、回転することで与えられた終点と視点の位置に移動させます。
シリンダーの径は長さに対して小さく設定し、線っぽくします。
3Dの曲線を表現にするには、たくさんのシリンダーをつなげてあたかも曲線を描いているように見せます。
これで簡易的ではありますがJavaFXで3Dラインを表現することができるようになりました。

最終更新日: 2019-09-05 10:56:38

ともさんのHP >プロブラミング >自作JavaLibrary >JavaFXで3D曲線

広告
新着ページ

笹原の開墾  
ボタンやラベルの修飾方法  
アイコンの差し替え  
シイタケの栽培  
薪ストーブに必要な薪の量  
防災士資格取得試験  
洋裁作業机  
伐木のしかた  
薪ストーブの点火  
薪ストーブ窓の掃除  
園芸資材に使う竹  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます