Javafx 简明教程

JavaFX - Translation Transformation

平移变换只是将一个对象移动到同一平面上不同的位置。你可以通过向原始坐标 (X, Y) 添加平移坐标 (tx, ty) 来平移二维平面中的一个点;这将得到点平移到的新坐标 (X', Y')。

translation

Translation Transformation in JavaFX

在 JavaFX 中,使用平移变换,可以将一个节点从一个位置移动到同一应用程序中的另一个位置。此变换借助 Translate class 中的 javafx.scene.transform 包应用于 JavaFX 节点。这个类表示一个 Affine 对象,它重新定位了 JavaFX 应用程序中的坐标。

Example 1

以下是演示 JavaFX 中平移的程序。在此,我们正在同一位置创建 2 个圆(节点),尺寸相同,但颜色不同(棕褐色和军蓝色)。我们还在 cadetblue 颜色的圆上应用平移。

将这段代码保存在名为 TranslationExample.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class TranslationExample extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing Circle1
      Circle circle = new Circle();

      //Setting the position of the circle
      circle.setCenterX(150.0f);
      circle.setCenterY(135.0f);

      //Setting the radius of the circle
      circle.setRadius(100.0f);

      //Setting the color of the circle
      circle.setFill(Color.BROWN);

      //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

      //Drawing Circle2
      Circle circle2 = new Circle();

      //Setting the position of the circle
      circle2.setCenterX(150.0f);
      circle2.setCenterY(135.0f);

      //Setting the radius of the circle
      circle2.setRadius(100.0f);

      //Setting the color of the circle
      circle2.setFill(Color.CADETBLUE);

      //Setting the stroke width of the circle
      circle2.setStrokeWidth(20);

      //Creating the translation transformation
      Translate translate = new Translate();

      //Setting the X,Y,Z coordinates to apply the translation
      translate.setX(300);
      translate.setY(50);
      translate.setZ(100);

      //Adding transformation to circle2
      circle2.getTransforms().addAll(translate);

      //Creating a Group object
      Group root = new Group(circle,circle2);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

      //Setting title to the Stage
      stage.setTitle("Translation transformation example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls TranslationExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls TranslationExample

执行后,上述程序会生成如下所示的 JavaFX 窗口。

translate transformation

Example 2

在以下示例中,我们演示了 3D 形状上的平移。将这段代码保存在名为 TranslationExample3D.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Cylinder;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class TranslationExample3D extends Application {
   @Override
   public void start(Stage stage) {
      Cylinder cy1 = new Cylinder(50, 100);
      Cylinder cy2 = new Cylinder(50, 100);

      //Creating the translation transformation
      Translate translate = new Translate();

      //Setting the X,Y,Z coordinates to apply the translation
      translate.setX(200);
      translate.setY(150);
      translate.setZ(100);

      //Adding transformation to circle2
      cy2.getTransforms().addAll(translate);

      //Creating a Group object
      Group root = new Group(cy1,cy2);

      //Creating a scene object
      Scene scene = new Scene(root, 400, 300);

      //Setting title to the Stage
      stage.setTitle("Translation transformation example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls TranslationExample3D.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls TranslationExample3D

执行后,上述程序会生成如下所示的 JavaFX 窗口。

translate 3d

正如我们所看到的,由于圆柱体的原始位置,我们无法像在平移图像中那样清晰地看到完整图像。因此,在像这样的情况下,平移变换就变得有必要。