java中画曲线_用java画三次曲线

该博客展示了如何在Java环境中利用Graphics2D类的CubicCurve2D绘制成一个三次曲线。通过指定起始坐标、两个控制点坐标以及终点坐标,创建并绘制了一个向上的曲线形状。
摘要由CSDN通过智能技术生成

package 绘制图形;

//画三次曲线 cubic(立方的) curve(曲线)

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Toolkit;

import java.awt.geom.CubicCurve2D;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class drawCubicCurve extends JFrame{

public static void main(String args[]){

new drawCubicCurve();

}

public drawCubicCurve() {

// TODO Auto-generated constructor stub

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screen = kit.getScreenSize();

int width = screen.width;

int hight = screen.height;

add(new DrawCubicCurvePanel());

setTitle("画三次曲线");

setVisible(true);

setBounds(width/4, hight/4, 500, 400);

setDefaultCloseOperation(3);

}

}

class DrawCubicCurvePanel extends JPanel{

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D)g;

// 坐标分别代表起始坐标,第一个控制点坐标,第二个控制点坐标,终点坐标

//不太理解坐标负数以什么为基准的,只知道是负数才能产生向上的凸线

CubicCurve2D.Double cubicCurve = new CubicCurve2D.Double(60,80,140,-140,140,300,220,80);

g2.draw(cubicCurve);

}

}

9990f5e31010

画三次曲线.png

三次贝塞尔曲线(Cubic Bezier Curve)是一种用于平滑地定义二维图形路径的数学工具,在Java中,它可以用来创建动效果、路径绘制或图像渲染等场景。三次贝塞尔曲线由四个控制点定义,每个曲线由三个控制点决定其形状,它们分别是起点P0、第一个控制点P1、第二个控制点P2和终点P3。 在Java中,可以通过以下步骤来使用三次贝塞尔曲线: 1. 定义贝塞尔曲线类(BezierCurve),通常会包含四个Point对象(起点和三个控制点)作为属性。 2. 实现计算曲线上任意一点的方法,如`getPointAt(t)`,参数t是0到1之间的值,表示从起点到终点的比例。 3. 使用`java.awt.geom.Point2D`或自定义类来表示二维坐标,并在需要的地方调用这些方法。 以下是一个简单的三次贝塞尔曲线类的概述: ```java public class BezierCurve { private Point2D.Float start, control1, control2, end; public BezierCurve(Point2D.Float start, Point2D.Float control1, Point2D.Float control2, Point2D.Float end) { this.start = start; this.control1 = control1; this.control2 = control2; this.end = end; } public Point2D.Float getPointAt(float t) { float x = (1 - t) * (1 - t) * (1 - t) * start.getX() + 3 * (1 - t) * (1 - t) * t * control1.getX() + 3 * (1 - t) * t * t * control2.getX() + t * t * t * end.getX(); float y = (1 - t) * (1 - t) * (1 - t) * start.getY() + 3 * (1 - t) * (1 - t) * t * control1.getY() + 3 * (1 - t) * t * t * control2.getY() + t * t * t * end.getY(); return new Point2D.Float(x, y); } } // 使用示例 BezierCurve curve = new BezierCurve(new Point2D.Float(0, 0), new Point2D.Float(100, 0), new Point2D.Float(150, 100), new Point2D.Float(200, 100)); Point2D.Float point = curve.getPointAt(0.5f); // 获取曲线中点 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值