📄 bezier.java
字号:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import java.lang.Math;
import java.util.Calendar;
public class bezier extends Applet implements Runnable, MouseMotionListener, MouseListener
{
Thread drawingThread = null; //?`???????p?X???b?h?é??
int AppletWidth, AppletHeight; //?`???????p????
Graphics WorkGraphics; //?`???????p?L?????p?X
Image WorkImage; //?`???????p?C???[?W
int inpoint[][]; //???è?_
int control[][]; //?§???_
int countstatus; //?X?e?[?^?X?J?E???^
int mox, moy; //?}?E?X?ì?ê?u
int bx, by; //?`?????[?v?p
double t; //?`???w??
int i; //???[?v
int bitpoint; //?_?ì?????3
int linepoint; //?ü?ì???3
static Random rand1 = new Random((long)Calendar.MILLISECOND); //?????-??
public void init()
{
AppletWidth = getSize().width; //?A?v???b?g?T?C?Y?e????
AppletHeight = getSize().height;
WorkImage = createImage(AppletWidth, AppletHeight); //?ì???ì???e???ú??
WorkGraphics = WorkImage.getGraphics(); //?ì???ì???Y?è
WorkGraphics.setColor(Color.white); //?ì???e?N???A
WorkGraphics.fillRect(0, 0, AppletWidth, AppletHeight);
addMouseMotionListener(this); //?}?E?X?ì?????ì????
addMouseListener(this); //?}?E?X?????ì????
mox = AppletWidth/2; //?}?E?X?ì???ú?ê?u
moy = AppletHeight/2;
inpoint = new int[3][2]; //???è?_
control = new int[2][2]; //?§???_
countstatus = 0; //?X?e?[?^?X?O?F???ú?l
bitpoint = 3; //?_?ì?????3
linepoint = 1; //?ü?ì???3
}
public void start()
{
if(drawingThread == null)
drawingThread = new Thread(this); //?`???????p?X???b?h?ì??
drawingThread.start(); //?`???????p?X???b?h?J?n
}
public void paint(Graphics g)
{
g.drawImage(WorkImage, 0, 0, this); //?ì???ì???e?W?J
}
public void run()
{
Thread thisThread = Thread.currentThread(); //???Y?ì?X???b?h?e????
while(drawingThread == thisThread) //?`???????p?X???b?h????
{
WorkGraphics.setColor(Color.orange);
WorkGraphics.drawString("-Bezier Curve-", AppletWidth/2-36, AppletHeight/2);
WorkGraphics.drawRect(0, 0, AppletWidth-1, AppletHeight-1);
for(i = 0;i < (AppletWidth+AppletHeight)*2;i++)
{
WorkGraphics.setColor(Color.white); //???F?m?C?Y
WorkGraphics.fillRect(rand1.nextInt()%AppletWidth, rand1.nextInt()%AppletHeight, 1, 1);
}
repaint(); //???`??
try
{
drawingThread.sleep(10); //?`???????p?X???b?h?e?X???[?v
}
catch(InterruptedException e) //???ì?X???b?h?ì???è???Y?á?O
{
showStatus(" " + e);
}
}
}
//?}?E?X?a???¢?????ì????
public void mouseMoved(MouseEvent evt)
{
mox = evt.getX(); //?}?E?X?ì?ê?u?e?m??
moy = evt.getY();
}
//?}?E?X?a?h???b?O?3?ê?????ì????
public void mouseDragged(MouseEvent evt)
{
mox = evt.getX(); //?}?E?X?ì?ê?u?e?m??
moy = evt.getY();
}
//?}?E?X?a?N???b?N?3?ê?????ì????
public void mouseClicked(MouseEvent evt)
{
}
//?}?E?X?a?ü?á?????ì????
public void mouseEntered(MouseEvent evt)
{
}
//?}?E?X?a?o?????ì????
public void mouseExited(MouseEvent evt)
{
countstatus = 0;
}
//?}?E?X?a???????3?ê?????ì????
public void mousePressed(MouseEvent evt)
{
mox = evt.getX(); //?}?E?X?ì?ê?u?e?m??
moy = evt.getY();
if(countstatus == 0)
{
control[0][0] = mox;
control[0][1] = moy;
countstatus = 1;
WorkGraphics.setColor(Color.lightGray);
WorkGraphics.fillOval(control[0][0], control[0][1], bitpoint, bitpoint);
}
else if(countstatus == 1)
{
inpoint[0][0] = mox;
inpoint[0][1] = moy;
countstatus = 2;
WorkGraphics.setColor(Color.lightGray);
WorkGraphics.fillOval(inpoint[0][0], inpoint[0][1], bitpoint, bitpoint);
}
else if(countstatus == 2)
{
inpoint[1][0] = mox;
inpoint[1][1] = moy;
countstatus = 3;
WorkGraphics.setColor(Color.lightGray);
WorkGraphics.fillOval(inpoint[1][0], inpoint[1][1], bitpoint, bitpoint);
}
else if(countstatus == 3)
{
inpoint[2][0] = mox;
inpoint[2][1] = moy;
WorkGraphics.setColor(Color.lightGray);
WorkGraphics.fillOval(inpoint[2][0], inpoint[2][1], bitpoint, bitpoint);
control[1][0] = (int)((float)(inpoint[1][0] + inpoint[2][0]) / 2.0);
control[1][1] = (int)((float)(inpoint[1][1] + inpoint[2][1]) / 2.0);
WorkGraphics.setColor(Color.lightGray);
WorkGraphics.fillOval(control[1][0], control[1][1], bitpoint, bitpoint);
for(t = 0.0;t <= 1.0;t = t + 0.001)
{
bx = (int)((1.0-t) * (1.0-t) * (1.0-t) * (double)control[0][0]
+ 3.0 * (1.0-t) * (1.0-t) * t * (double)inpoint[0][0]
+ 3.0 * (1.0-t) * t * t * (double)inpoint[1][0]
+ t * t * t * (double)control[1][0]);
by = (int)((1.0-t) * (1.0-t) * (1.0-t) * (double)control[0][1]
+ 3.0 * (1.0-t) * (1.0-t) * t * (double)inpoint[0][1]
+ 3.0 * (1.0-t) * t * t * (double)inpoint[1][1]
+ t * t * t * (double)control[1][1]);
Color partColor = new Color((float)1.0, (float)0.8, (float)0.8);
WorkGraphics.setColor(partColor);
WorkGraphics.fillRect(bx, by, 2, 2);
}
control[0][0] = control[1][0];
control[0][1] = control[1][1];
inpoint[0][0] = inpoint[2][0];
inpoint[0][1] = inpoint[2][1];
countstatus = 2;
}
}
//?}?E?X?a?????????[?X?3?ê?????ì????
public void mouseReleased(MouseEvent evt)
{
}
public void update(Graphics g)
{
paint(g);
}
public void stop()
{
drawingThread = null; //?`???????p?X???b?h?I?1
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -