⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bezier.java

📁 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 + -