【问题标题】:JavaFX 3D: Transforming Cylinder to defined start and end pointsJavaFX 3D:将圆柱体转换为定义的起点和终点
【发布时间】:2016-08-06 00:10:51
【问题描述】:

假设我希望Cylinder 以某个 3D 点开始,并以某个其他 3D 点结束。

据我所知,这样做的方法是计算两点之间的欧几里得距离并创建一个长度相同的圆柱体。然后,圆柱体应该平移和旋转,使其真正从起点开始,到终点结束。

我搞砸了这些转换,没有成功将圆柱体放置在正确的位置。

能否分享一些函数实现的代码sn-p:

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

【问题讨论】:

    标签: javafx javafx-8 javafx-3d


    【解决方案1】:

    在找到解决方案后回答自己。

    在这里找到了一个不错的 sn-p: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;
    }
    

    【讨论】:

    • 完美,有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多