本实例演示三次方贝塞尔曲线,数学数值分析领域中,贝塞尔曲线英语:Bézier curve)是电脑图形学中相当重要的参数曲线。更高维度的广泛化贝塞尔曲线就称作贝塞尔曲面,其中贝塞尔三角是一种特殊的实例。以下是贝塞尔曲线的实例:

线性贝塞尔曲线

给定点P0P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出:

  • \mathbf{B}(t)=\mathbf{P}_0 + (\mathbf{P}_1-\mathbf{P}_0)t=(1-t)\mathbf{P}_0 + t\mathbf{P}_1 \mbox{ , } t \in [0,1]

且其等同于线性插值

二次方贝塞尔曲线

二次方贝塞尔曲线的路径由给定点P0P1P2的函数Bt)追踪:

  • \mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2t(1 - t)\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{ , } t \in [0,1]

TrueType字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。


三次方贝塞尔曲线

P0P1P2P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1P2;这两个点只是在那里提供方向资讯。P0P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。

曲线的参数形式为:

  • \mathbf{B}(t)=\mathbf{P}_0(1-t)^3+3\mathbf{P}_1t(1-t)^2+3\mathbf{P}_2t^2(1-t)+\mathbf{P}_3t^3 \mbox{ , } t \in [0,1]


本实例的代码如下:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.*;

public class CubicBezierCurve extends Application {
  public void start(Stage primaryStage) {
    Pane pane = new Pane();
   
    CubicCurve cubicCurve = new CubicCurve() ;
    cubicCurve.setStartX(50);
    cubicCurve.setStartY(75);                              
    cubicCurve.setControlX1(80);
    cubicCurve.setControlY1(-25);                   
    cubicCurve.setControlX2(110);
    cubicCurve.setControlY2(175);                
    cubicCurve.setEndX(140);
    cubicCurve.setEndY(75) ;                             
    cubicCurve.setStroke(Color.BLACK); 
    cubicCurve.setStrokeWidth(3); 
    cubicCurve.setFill(Color.WHITE);
    pane.getChildren().add(cubicCurve);

    Scene scene =new Scene(pane,200,150);
    primaryStage.setTitle("CubicBezierCurve");
    primaryStage.setScene(scene);
    primaryStage.show();
    }
}


运行结果如下

wKioL1RrS3uy26-TAABAfSaHW2w862.jpg