ともさんのHP >プロブラミング >自作JavaLibrary >JavaFXで3D曲線
JavaFXで3D曲線
JavaFXを用いると
Java
楽天 で3Dオブジェクトを表示することができます。
しかし表示できるオブジェクトは限られていてメッシュ、立方体、円筒(シリンダー)、球の四つしかありません。
3Dの線を表示する必要ができたのですが、3Dラインは用意されていないのでこまってしまいました。
しかし諦めるわけにもいかないので、簡易的ですがうまく3DLINEを表現できる方法を考えました。
シリンダーで線を表現する
JavaFX楽天 で様々な3Dオブジェクトを表示させるのであれば、OpenGLを使うのが良いと思います。
しかし、私はOpenGLをさわった経験がなく、検索しても情報が少ないのです。
そこで、使えるものを利用して簡易的に3DLINEを表現することにしました。
単純に言うと細いシリンダーを使ってあたかも3Dの線を引いたかのように表現します。
立方体を細長くして線のように見せることもできるのですが、今回はシリンダーをもちいました。
こんな感じで表示できます。
サンプルコード
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曲線
ツイート