3次元ベジエ曲線を描画する(CubicCurve2Dクラス)

広告

3次元ベジエ曲線を描画する場合はCubicCurve2Dクラスのオブジェクトを使用します。CubicCurve2Dクラスはabstractクラスですので実際にはCubicCurve2D.Doubleクラス又はCubicCurve2D.Floatクラスを使用します。

※CubicCurve2Dクラスの詳しい使い方については『CubicCurve2Dクラス』を参照して下さい。

CubicCurve2Dクラスは始点、終点、そして2つの制御点を設定し三次元ベジエ曲線を作成します。コンストラクタの1つは次の通りです。

CubicCurve2D.Double ellipse = new CubicCurve2D.Double(始点x座標, 
                                                      始点y座標, 
                                                      制御点1x座標, 
                                                      制御点1y座標, 
                                                      制御点2x座標, 
                                                      制御点2y座標, 
                                                      終点x座標, 
                                                      終点y座標);

具体的には次のように記述します。

public void paintComponent(Graphics g){
  Graphics2D g2 = (Graphics2D)g;

  CubicCurve2D.Double curve1 = new CubicCurve2D.Double(60.0d, 20.0d, 
                                                       40.0d, 140.0d, 
                                                       200.0d, 30.0d, 
                                                       220.0d, 120.0d);
  g2.draw(curve1);

  CubicCurve2D.Double curve2 = new CubicCurve2D.Double(60.0d, 20.0d, 
                                                       220.0d, 30.0d, 
                                                       20.0d, 150.0d, 
                                                       220.0d, 120.0d);
  g2.fill(curve2);
}

サンプルプログラム

簡単なサンプルを一度試してみます。

ShapeTest7.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.BasicStroke;

public class ShapeTest7 extends JPanel{

  public static void main(String[] args){
    JFrame frame = new JFrame();

    ShapeTest7 app = new ShapeTest7();
    frame.getContentPane().add(app);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                        RenderingHints.VALUE_ANTIALIAS_ON);

    BasicStroke wideStroke = new BasicStroke(4.0f);
    g2.setStroke(wideStroke);

    CubicCurve2D.Double curve1 = new CubicCurve2D.Double(40.0d, 20.0d, 
                                                        30.0d, 140.0d, 
                                                        180.0d, 30.0d, 
                                                        190.0d, 150.0d);
    g2.draw(curve1);

    BasicStroke normalStroke = new BasicStroke(1.0f);
    g2.setStroke(normalStroke);

    g2.setPaint(Color.PINK);
    CubicCurve2D.Double curve2 = new CubicCurve2D.Double(80.0d, 20.0d, 
                                                         240.0d, 30.0d, 
                                                         40.0d, 150.0d, 
                                                         250.0d, 120.0d);
    g2.fill(curve2);

  }
}

上記をコンパイルした後で実行すると次のように表示されます。

3次元ベジエ曲線を描画する

( Written by Tatsuo Ikura )