virtualsphere.java

来自「java编的模拟一个小球的非弹性碰撞」· Java 代码 · 共 76 行

JAVA
76
字号
import java.awt.*;

public class VirtualSphere
{
	Color color=new Color(255,255,255);
	int x,y,radius;
	int nDiffuse=8;
	int nSpecular=4;
	
	public VirtualSphere(int x,int y,int radius)
	{
		this.x=x;
		this.y=y;
		this.radius=radius;
	}
	
	public void setColor(Color color)
	{
		this.color=color;
	}
	
	public void setPrecision(int nDiffuse,int nSpecular)
	{
		this.nDiffuse=nDiffuse;
		this.nSpecular=nSpecular;
	}
	
	public void draw(Graphics g)
	{
		int red=color.getRed();
		int green=color.getGreen();
		int blue=color.getBlue();
		int i;
		
		for(i=0;i<nDiffuse;i++)
		{
			double index=i;
			int rNow=(i*red*4)/(7*nDiffuse)+(3*red)/7;
			int gNow=(i*green*4)/(7*nDiffuse)+(3*green)/7;
			int bNow=(i*blue*4)/(7*nDiffuse)+(3*blue)/7;
			Color linearColor=new Color(rNow,gNow,bNow);
			g.setColor(linearColor);
			g.fillOval(x+(int)(1.25*(index*0.8)),y+(int)(0.4*index),
					   radius-(int)(1.25*index)+1,radius-(int)(1.25*index)+1);
		}
		for(i=0;i<nSpecular;i++)
		{
			double index =(double)(nDiffuse+i);
			int rNow=red+((255-red)*i)/(int)(2.0*(double)nSpecular);
			int gNow=green+((255-green)*i)/(int)(2.0*(double)nSpecular);
			int bNow=blue+((255-blue)*i)/(int)(2.0*(double)nSpecular);
			Color linearColor=new Color(rNow,gNow,bNow);
			g.setColor(linearColor);
			g.fillOval(x+(int)(1.25*(index*0.8)),y+(int)(0.4*index),
			           radius-(int)(1.25*index)+1,radius-(int)(1.25*index)+1);
		}
	}
}

















⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?