JavaFX - 绘制三次贝塞尔曲线



三次贝塞尔曲线由两个变量的三次多项式函数描述,可以写成如下形式:

CubicCurve

这些贝塞尔曲线通常用于计算机图形学。它们是参数曲线,在所有比例下都显得相当平滑。这些曲线是基于 XY 平面上的点绘制的。

三次贝塞尔曲线是 XY 平面上的三次贝塞尔参数曲线。它使用四个点绘制:**起点、终点、控制点和控制点 2**,如下图所示。

Bezier Curves

JavaFX 中的三次贝塞尔曲线

在 JavaFX 中,三次贝塞尔曲线由名为 **CubicCurve** 的类表示。此类属于 **javafx.scene.shape** 包。

通过实例化此类,可以在 JavaFX 中创建 CubicCurve 节点。

此类具有 8 个双精度数据类型属性:

  • **startX** - 曲线起点的 x 坐标。

  • **startY** - 曲线起点的 y 坐标。

  • **controlX1** - 曲线第一个控制点的 x 坐标。

  • **controlY1** - 曲线第一个控制点的 y 坐标。

  • **controlX2** - 曲线第二个控制点的 x 坐标。

  • **controlY2** - 曲线第二个控制点的 y 坐标。

  • **endX** - 曲线终点的 x 坐标。

  • **endY** - 曲线终点的 y 坐标。

要绘制三次贝塞尔曲线,需要向这些属性传递值,可以通过在实例化时按相同顺序将它们传递给此类的构造函数,或者使用它们各自的 setter 方法。

绘制三次贝塞尔曲线的步骤

要在 JavaFX 中绘制贝塞尔三次曲线,请按照以下步骤操作。

步骤 1:创建三次贝塞尔曲线

可以通过实例化名为 **CubicCurve** 的类(属于 **javafx.scene.shape** 包)在 JavaFX 中创建三次贝塞尔曲线。可以在 Application 类的 start() 方法中实例化此类,如下所示。

public class ClassName extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {
      //Creating an object of the class CubicCurve         
      CubicCurve cubiccurve = new CubicCurve();   
   }    
} 

步骤 2:设置三次贝塞尔曲线的属性

使用各自的 setter 方法指定四个点的 x、y 坐标:**起点、终点、控制点 1** 和 **控制点 2**,如下面的代码块所示。

//Setting properties to cubic curve 
cubicCurve.setStartX(100.0f); 
cubicCurve.setStartY(150.0f); 
cubicCurve.setControlX1(400.0f); 
cubicCurve.setControlY1(40.0f); 
cubicCurve.setControlX2(175.0f); 
cubicCurve.setControlY2(250.0f); 
cubicCurve.setEndX(500.0f); 
cubicCurve.setEndY(150.0f);

步骤 3:将三次贝塞尔曲线添加到 Group

通过将先前创建的 CubicCurve 对象作为参数传递给其构造函数,在 start() 方法中实例化 Group 类。

Group root = new Group(cubiccurve);

步骤 4:启动应用程序

创建二维对象后,请按照以下步骤正确启动应用程序:

  • 首先,通过将 Group 对象作为参数值传递给其构造函数来实例化名为 **Scene** 的类。还可以向此构造函数传递应用程序屏幕的尺寸作为可选参数。

  • 然后,使用 **Stage** 类的 **setTitle()** 方法设置舞台的标题。

  • 现在,使用名为 **Stage** 的类的 **setScene()** 方法将 Scene 对象添加到舞台。

  • 使用名为 **show()** 的方法显示场景的内容。

  • 最后,借助 **launch()** 方法启动应用程序。

示例

以下程序使用 JavaFX 生成贝塞尔三次曲线。将此代码保存在名为 **CubicCurveExample.java** 的文件中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.shape.CubicCurve; 
         
public class CubicCurveExample extends Application {  
   @Override 
   public void start(Stage stage) { 
      //Drawing a cubic curve 
      CubicCurve cubicCurve = new CubicCurve(); 
       
      //Setting properties to cubic curve
      cubicCurve.setStartX(100.0f); 
      cubicCurve.setStartY(150.0f); 
      cubicCurve.setControlX1(400.0f); 
      cubicCurve.setControlY1(40.0f); 
      cubicCurve.setControlX2(175.0f); 
      cubicCurve.setControlY2(250.0f); 
      cubicCurve.setEndX(500.0f); 
      cubicCurve.setEndY(150.0f);      
         
      //Creating a Group object  
      Group root = new Group(cubicCurve); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing a cubic curve"); 
         
      //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 CubicCurveExample.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls CubicCurveExample

输出

执行上述程序后,将生成一个 JavaFX 窗口,显示如下所示的贝塞尔三次曲线。

Drawing Cubic Curve

示例

在下面的示例中,我们尝试将 DropShadow 效果应用于绘制的三次贝塞尔曲线。将此代码保存在名为 **CubicCurveEffect.java** 的文件中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow; 
import javafx.stage.Stage; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.CubicCurve; 
         
public class CubicCurveEffect extends Application {  
   @Override 
   public void start(Stage stage) { 
      //Drawing a cubic curve 
      CubicCurve cubicCurve = new CubicCurve(); 
       
      //Setting properties to cubic curve
      cubicCurve.setStartX(50.0f); 
      cubicCurve.setStartY(100.0f); 
      cubicCurve.setControlX1(200.0f); 
      cubicCurve.setControlY1(40.0f); 
      cubicCurve.setControlX2(150.0f); 
      cubicCurve.setControlY2(200.0f); 
      cubicCurve.setEndX(200.0f); 
      cubicCurve.setEndY(50.0f);
	  
	  cubicCurve.setFill(Color.RED);  

      //Instantiating the DropShadow class 
      DropShadow ds = new DropShadow();  
      
      //Applying DropShadow effect to cubicCurve 
      cubicCurve.setEffect(ds); 	  
         
      //Creating a Group object  
      Group root = new Group(cubicCurve); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 300, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing a cubic curve"); 
         
      //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 CubicCurveEffect.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls CubicCurveEffect

输出

执行上述程序后,将生成一个 JavaFX 窗口,显示如下所示的贝塞尔三次曲线。

Drawing Cubic Curve
广告