三次Bezier曲线绘制编程已知三次Bezier曲线调和函数如下:B0(t)=(1-t)^3B1(t)=3*t*(1-t)^2B2(t)=3*(t^2)*(1-t)B3(t)=t^3试编写drawBezier(Graphics g,int x0,int y0,int x1,int y1,int x2,int y2,int rx3,int ry3),绘制Bezier曲线,其中g
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/29 21:10:04
三次Bezier曲线绘制编程已知三次Bezier曲线调和函数如下:B0(t)=(1-t)^3B1(t)=3*t*(1-t)^2B2(t)=3*(t^2)*(1-t)B3(t)=t^3试编写drawBezier(Graphics g,int x0,int y0,int x1,int y1,int x2,int y2,int rx3,int ry3),绘制Bezier曲线,其中g
三次Bezier曲线绘制编程
已知三次Bezier曲线调和函数如下:
B0(t)=(1-t)^3
B1(t)=3*t*(1-t)^2
B2(t)=3*(t^2)*(1-t)
B3(t)=t^3
试编写drawBezier(Graphics g,int x0,int y0,int x1,int y1,int x2,int y2,int rx3,int ry3),绘制Bezier曲线,其中g为绘制设备对象,可以调用函数g.drawLine(startx,starty,endx,endy)绘制直线,x0,x1,x2,y1,y2,y3为控制点坐标
三次Bezier曲线绘制编程已知三次Bezier曲线调和函数如下:B0(t)=(1-t)^3B1(t)=3*t*(1-t)^2B2(t)=3*(t^2)*(1-t)B3(t)=t^3试编写drawBezier(Graphics g,int x0,int y0,int x1,int y1,int x2,int y2,int rx3,int ry3),绘制Bezier曲线,其中g
顺便练一下贝塞尔函数,写了一个applet,每秒钟随机生成4个点展示效果.
满足题目要求的接口.
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class Test extends Applet {
\x09private static final long serialVersionUID=-1570645570118871214L;
\x09private int px[],py[];
\x09private Random rnd;
\x09@Override
\x09public void init(){
\x09\x09rnd=new Random(System.currentTimeMillis());
\x09\x09px=new int[4];
\x09\x09py=new int[4];\x09\x09
\x09\x09Timer t=new Timer();
\x09\x09t.scheduleAtFixedRate(new TimerTask() {
\x09\x09\x09@Override
\x09\x09\x09public void run() {\x09\x09
\x09\x09\x09\x09repaint();
\x09\x09\x09}
\x09\x09}, 0, 1000);
\x09}
\x09private void generate(){\x09\x09
\x09\x09for(int i=0;i<4;i++){
\x09\x09\x09px[i]=rnd.nextInt(150);
\x09\x09\x09py[i]=rnd.nextInt(150);
\x09\x09}
\x09}
\x09static public void drawBezier(
\x09\x09Graphics g,
\x09\x09int x0,int y0,
\x09\x09int x1,int y1,
\x09\x09int x2,int y2,
\x09\x09int x3,int y3){
\x09\x09int
\x09\x09\x09px[]={x0,x1,x2,x3},
\x09\x09\x09py[]={y0,y1,y2,y3};
\x09\x09
\x09\x09g.setColor(Color.RED);
\x09\x09for(int i=0;i<px.length;i++){
\x09\x09\x09g.fillOval(px[i], py[i], 5, 5);
\x09\x09}
\x09\x09g.setColor(Color.GREEN);
\x09\x09double x=0,y=0;
\x09\x09int c=0;
\x09\x09for(double t=0;t<=1;t+=0.01){
\x09\x09\x09double dx=cubicBezier(t, px),
\x09\x09\x09\x09dy=cubicBezier(t,py);
\x09\x09\x09System.out.println("dx:"+dx+", dy:"+dy);
\x09\x09\x09if(c++>0) g.drawLine((int)x, (int)y, (int)dx, (int)dy);
\x09\x09\x09x=dx; y=dy;
\x09\x09}
\x09}
\x09static private double cubicBezier(double t,int p[]){
\x09\x09return Math.pow(1-t,3)*p[0]+
\x09\x09\x09\x093*t*Math.pow(1-t,2)*p[1]+
\x09\x09\x09\x093*Math.pow(t,2)*(1-t)*p[2]+
\x09\x09\x09\x09Math.pow(t,3)*p[3];
\x09}
\x09@Override
\x09public void paint(Graphics g){
\x09\x09generate();
\x09\x09drawBezier(g,
\x09\x09\x09px[0],py[0],
\x09\x09\x09px[1],py[1],
\x09\x09\x09px[2],py[2],
\x09\x09\x09px[3],py[3]
\x09\x09);
\x09}
}