JavaFX 3D:将圆柱体转换为定义的起点和终点

JavaFX 3D:将圆柱体转换为定义的起点和终点,javafx,javafx-8,javafx-3d,Javafx,Javafx 8,Javafx 3d,假设我想要一个圆柱体从某个3D点开始,在另一个3D点结束 据我所知,这样做的方法是计算两个点之间的欧几里德距离,并创建一个长度相同的圆柱体。然后,应平移和旋转圆柱体,使其真正从起点开始,并在终点结束 我被这些转换搞得一团糟,无法成功地将圆柱体放置在正确的位置 请分享一些函数实现的代码片段: void createCylinder(Group group, double p1X, double p1Y, double p1Z, d

假设我想要一个
圆柱体
从某个3D点开始,在另一个3D点结束

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

我被这些转换搞得一团糟,无法成功地将圆柱体放置在正确的位置

请分享一些函数实现的代码片段:

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

回答我自己,因为我找到了解决办法

在此处找到了一个不错的代码段:

下面是代码,很简单:

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;
}

太好了,很有帮助