JavaFX - 2D Shapes CubicCurve
Uma CubicCurve é descrita por uma função polinomial de terceiro grau de duas variáveis e pode ser escrita da seguinte forma -
Essas curvas de Bézier são geralmente usadas em computação gráfica. São curvas paramétricas que parecem razoavelmente suaves em todas as escalas. Essas curvas são desenhadas com base em pontos no plano XY.
Uma curva cúbica é uma curva paramétrica de Bezier no plano XY é uma curva de grau 3. Ela é desenhada usando quatro pontos - Start Point, End Point, Control Point and Control Point2 conforme mostrado no diagrama a seguir.
No JavaFX, um CubicCurve é representado por uma classe chamada CubicCurve. Esta classe pertence ao pacotejavafx.scene.shape.
Ao instanciar essa classe, você pode criar um nó CubicCurve no JavaFX.
Esta classe tem 8 propriedades do tipo de dados duplo, a saber -
startX - A coordenada x do ponto inicial da curva.
startY - A coordenada y do ponto inicial da curva.
controlX1 - A coordenada x do primeiro ponto de controle da curva.
controlY1 - A coordenada y do primeiro ponto de controle da curva.
controlX2 - A coordenada x do segundo ponto de controle da curva.
controlY2 - A coordenada y do segundo ponto de controle da curva.
endX - A coordenada x do ponto final da curva.
endY - A coordenada y do ponto final da curva.
Para desenhar uma curva cúbica, você precisa passar valores para essas propriedades, seja passando-os para o construtor desta classe, na mesma ordem, no momento da instanciação, conforme mostrado abaixo -
CubicCurve cubiccurve = new CubicCurve(
startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);
Ou, usando seus respectivos métodos de definição da seguinte forma -
setStartX(value);
setStartY(value);
setControlX1(value);
setControlY1(value);
setControlX2(value);
setControlY2(value);
setEndX(value);
setEndY(value);
Passos para desenhar CubicCurve
Para desenhar uma curva cúbica de Bezier no JavaFX, siga as etapas fornecidas a seguir.
Etapa 1: Criação de uma classe
Crie uma classe Java e herde o Application classe do pacote javafx.application e implementar o start() método desta classe da seguinte forma.
public class ClassName extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Etapa 2: Criando um CubicCurve
Você pode criar um CubicCurve em JavaFX instanciando a classe chamada CubicCurve que pertence a um pacote javafx.scene.shape. Você pode instanciar essa classe da seguinte maneira.
//Creating an object of the class CubicCurve
CubicCurve cubiccurve = new CubicCurve();
Etapa 3: Definindo Propriedades para CubicCurve
Especifique as coordenadas x, y dos quatro pontos: start point, end point, control point1 e control point2 da curva necessária, usando seus respectivos métodos de setter, conforme mostrado no bloco de código a seguir.
//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);
Etapa 4: Criação de um objeto de grupo
No start() método, crie um objeto de grupo instanciando a classe chamada Group, que pertence ao pacote javafx.scene.
Passe o objeto CubicCurve (nó) criado na etapa anterior como um parâmetro para o construtor da classe Grupo para adicioná-lo ao grupo da seguinte maneira -
Group root = new Group(cubiccurve);
Etapa 5: Criação de um objeto de cena
Crie uma cena instanciando a classe chamada Scene que pertence ao pacote javafx.scene. Para esta aula passe o objeto Grupo(root) criado na etapa anterior.
Além do objeto raiz, você também pode passar dois parâmetros duplos que representam a altura e a largura da tela junto com o objeto da classe Grupo da seguinte maneira.
Scene scene = new Scene(group ,600, 300);
Etapa 6: definir o título do palco
Você pode definir o título do palco usando o setTitle() método do Stageclasse. oprimaryStage é um objeto Stage que é passado para o método start da classe Scene como um parâmetro.
Usando o primaryStage objeto, defina o título da cena como Sample Application do seguinte modo.
primaryStage.setTitle("Sample Application");
Etapa 7: Adicionando cena ao palco
Você pode adicionar um objeto Scene ao palco usando o método setScene() da classe chamada Stage. Adicione o objeto Scene preparado nas etapas anteriores usando este método como segue.
primaryStage.setScene(scene)
Etapa 8: Exibir o conteúdo do palco
Exibir o conteúdo da cena usando o método chamado show() do Stage classe da seguinte forma.
Etapa 9: iniciar o aplicativo
Inicie o aplicativo JavaFX chamando o método estático launch() do Application classe do método principal da seguinte forma.
public static void main(String args[]){
launch(args);
}
Exemplo
A seguir está um programa que gera uma Bezier CubicCurve usando JavaFX. Salve este código em um arquivo com o nomeCubicCurveExample.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);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
javac CubicCurveExample.java
java CubicCurveExample
Ao ser executado, o programa acima gera uma janela JavaFX exibindo uma curva cúbica de Bezier, conforme mostrado abaixo.