Javafx 简明教程
JavaFX - Shearing Transformation
一种使一个对象形状倾斜的变换被称作剪切变换。它有两种, X-Shear 和 Y-Shear 。一种使 X 坐标值偏移,另一种使 Y 坐标值偏移。但是,在这两种情况下,都仅有一个坐标改变了它的值,而另外一个坐标保持了它的值。剪切也被称为 Skewing 。
Example 1
下面是演示在 JavaFX 中剪切的代码。在这里,我们在相同的位置创建两个多边形(节点),它们具有相同的大小,但颜色不同(蓝色和透明)。我们在透明多边形上应用剪切。
将这个代码保存在名为 XShearingExample.java 的文件中。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.transform.Shear;
import javafx.stage.Stage;
public class XShearingExample extends Application {
@Override
public void start(Stage stage) {
Polygon hexagon1 = new Polygon();
//Adding coordinates to the hexagon
hexagon1.getPoints().addAll(new Double[]{
200.0, 50.0,
400.0, 50.0,
450.0, 150.0,
400.0, 250.0,
200.0, 250.0,
150.0, 150.0,
});
//Setting the fill color for the hexagon
hexagon1.setFill(Color.BLUE);
hexagon1.setStroke(Color.BLACK);
Polygon hexagon2 = new Polygon();
//Adding coordinates to the hexagon
hexagon2.getPoints().addAll(new Double[]{
200.0, 50.0,
400.0, 50.0,
450.0, 150.0,
400.0, 250.0,
200.0, 250.0,
150.0, 150.0,
});
//Setting the fill color for the hexagon
hexagon2.setFill(Color.TRANSPARENT);
hexagon2.setStroke(Color.BLACK);
//Creating shear transformation
Shear shear = new Shear();
//Setting the pivot points
shear.setPivotX(200);
shear.setPivotY(250);
//Setting the dimensions for the shear
shear.setX(0.5);
shear.setY(0.0);
//Adding the transformation to the polygon
hexagon2.getTransforms().addAll(shear);
//Creating a Group object
Group root = new Group(hexagon1, hexagon2);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Shearing 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 XShearingExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls XShearingExample
执行后,上述程序会生成如下所示的 JavaFX 窗口。
Example 2
在前面的例子中,我们已经看到了如何执行 X 剪切,它相对于 X 轴倾斜六边形。在这个例子中,我们将会看到在另一个 JavaFX 2D 形状上执行 Y 剪切,例如五边形。
将这个代码保存在名为 YShearingExample.java 的文件中。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.transform.Shear;
import javafx.stage.Stage;
public class YShearingExample extends Application {
@Override
public void start(Stage stage) {
Polygon pentagon1 = new Polygon();
//Adding coordinates to the pentagon
pentagon1.getPoints().addAll(new Double[]{
200.0, 50.0,
400.0, 50.0,
450.0, 150.0,
400.0, 250.0,
200.0, 250.0,
});
//Setting the fill color for the pentagon
pentagon1.setFill(Color.ORANGE);
pentagon1.setStroke(Color.BLACK);
Polygon pentagon2 = new Polygon();
//Adding coordinates to the pentagon
pentagon2.getPoints().addAll(new Double[]{
200.0, 50.0,
400.0, 50.0,
450.0, 150.0,
400.0, 250.0,
200.0, 250.0,
});
//Setting the fill color for the pentagon
pentagon2.setFill(Color.TRANSPARENT);
pentagon2.setStroke(Color.BLACK);
//Creating shear transformation
Shear shear = new Shear();
//Setting the pivot points
shear.setPivotX(200);
shear.setPivotY(250);
//Setting the dimensions for the shear
shear.setX(0.0);
shear.setY(0.5);
//Adding the transformation to the polygon
pentagon2.getTransforms().addAll(shear);
//Creating a Group object
Group root = new Group(pentagon1, pentagon2);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting title to the Stage
stage.setTitle("Shearing 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 YShearingExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls YShearingExample
执行后,上述程序会生成如下所示的 JavaFX 窗口。