根据三次Bezier曲线的基函数,三次Bezier曲线。java
时间: 2023-06-18 15:07:52 浏览: 128
使用java实现的Bezier曲线
5星 · 资源好评率100%
以下是Java代码实现三次贝塞尔曲线:
```java
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BezierCurve extends JPanel {
private Point[] points; // 存储四个控制点
public BezierCurve(Point p0, Point p1, Point p2, Point p3) {
points = new Point[] {p0, p1, p2, p3};
}
// 计算三次Bezier曲线上的点
private Point calculateBezierPoint(double t) {
double x = (1 - t) * (1 - t) * (1 - t) * points[0].x +
3 * t * (1 - t) * (1 - t) * points[1].x +
3 * t * t * (1 - t) * points[2].x +
t * t * t * points[3].x;
double y = (1 - t) * (1 - t) * (1 - t) * points[0].y +
3 * t * (1 - t) * (1 - t) * points[1].y +
3 * t * t * (1 - t) * points[2].y +
t * t * t * points[3].y;
return new Point((int) x, (int) y);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 画出控制点和线段
g.drawPolyline(new int[] {points[0].x, points[1].x, points[2].x, points[3].x},
new int[] {points[0].y, points[1].y, points[2].y, points[3].y}, 4);
// 画出三次Bezier曲线
Point lastPoint = points[0];
for (double t = 0; t <= 1; t += 0.01) {
Point currentPoint = calculateBezierPoint(t);
g.drawLine(lastPoint.x, lastPoint.y, currentPoint.x, currentPoint.y);
lastPoint = currentPoint;
}
}
public static void main(String[] args) {
Point p0 = new Point(100, 100);
Point p1 = new Point(200, 50);
Point p2 = new Point(250, 200);
Point p3 = new Point(350, 150);
JFrame frame = new JFrame("Bezier Curve");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.add(new BezierCurve(p0, p1, p2, p3));
frame.setVisible(true);
}
}
```
在上面的代码中,我们定义了一个`calculateBezierPoint`方法来计算三次Bezier曲线上的点,它接收一个参数`t`表示曲线上的位置,返回一个`Point`对象表示该位置的坐标。然后在`paintComponent`方法中,我们通过一个循环来画出曲线上的点。
在`main`方法中,我们定义了四个控制点`p0`、`p1`、`p2`、`p3`,然后创建一个`BezierCurve`对象,并将其添加到`JFrame`中显示出来。你可以根据需要修改这些控制点的坐标,以生成不同形状的曲线。
阅读全文