當前位置:編程學習大全網 - 編程語言 - 三次Bezier曲線繪制編程

三次Bezier曲線繪制編程

順便練壹下貝塞爾函數,寫了壹個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?{

private?static?final?long?serialVersionUID=-1570645570118871214L;

private?int?px[],py[];

private?Random?rnd;

@Override

public?void?init(){

rnd=new?Random(System.currentTimeMillis());

px=new?int[4];

py=new?int[4];

Timer?t=new?Timer();

t.scheduleAtFixedRate(new?TimerTask()?{

@Override

public?void?run()?{

repaint();

}

},?0,?1000);

}

private?void?generate(){

for(int?i=0;i<4;i++){

px[i]=rnd.nextInt(150);

py[i]=rnd.nextInt(150);

}

}

static?public?void?drawBezier(

Graphics?g,

int?x0,int?y0,?

int?x1,int?y1,

int?x2,int?y2,

int?x3,int?y3){

int?

px[]={x0,x1,x2,x3},

py[]={y0,y1,y2,y3};

g.setColor(Color.RED);

for(int?i=0;i<px.length;i++){

g.fillOval(px[i],?py[i],?5,?5);

}

g.setColor(Color.GREEN);

double?x=0,y=0;

int?c=0;

for(double?t=0;t<=1;t+=0.01){

double?dx=cubicBezier(t,?px),

dy=cubicBezier(t,py);

System.out.println("dx:"+dx+",?dy:"+dy);

if(c++>0)?g.drawLine((int)x,?(int)y,?(int)dx,?(int)dy);

x=dx;?y=dy;

}

}

static?private?double?cubicBezier(double?t,int?p[]){

return?Math.pow(1-t,3)*p[0]+

3*t*Math.pow(1-t,2)*p[1]+

3*Math.pow(t,2)*(1-t)*p[2]+

Math.pow(t,3)*p[3];

}

@Override

public?void?paint(Graphics?g){

generate();

drawBezier(g,?

px[0],py[0],

px[1],py[1],

px[2],py[2],

px[3],py[3]

);

}

}

  • 上一篇:求壹部電影,壹個男人造了個機器人美女,後來相愛了,機器人美女沒有老,男人到老她們都還相愛
  • 下一篇:PLC現場總線接頭如何使用?
  • copyright 2024編程學習大全網