用java模拟光的单缝衍射和牛顿环
郑州文化路中心-JSD1506-刘建伟
记得高中物理中的光的单缝衍射和牛顿环的图案吗?如果忘了,现在去百度一下,相信你马上就能回想起来它的大概内容。我做了2个小程序分别模拟光的单缝衍射和牛顿环的图案。大约各分为3步:
1:写出模拟黑白图案的程序
2:写出模拟彩色图案的程序
3:写出中心亮度大,越远离中心越暗的图案的程序
注释我就不写了,这个程序逻辑上来说不是特别难,相信没有程序大家也能读懂。需要注意的是,这个程序只是对真正的物理实验做出来的图案的模仿和简化,其中彩色的图案色彩还弄的不像,如果哪位同学对彩色图案的程序有办法能使图像更接近物理实验做出来的结果,欢迎指教。
衍射1:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 光的衍射黑白 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<200;j++){ int distance=i-250; int k=(int)((Math.cos((distance*distance)/400.0)+1)*127); c=new Color(k%255,k%255,k%255); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 200); jf.setLocation(0, 0); jf.add(new 光的衍射黑白()); jf.setTitle("光的衍射黑白"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } 衍射2: import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 光的衍射彩色 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<200;j++){ int distance=i-250; int k=(int)((Math.cos((distance*distance)/635.0)+1)*127); int l=(int)((Math.cos((distance*distance)/473.0)+1)*127); int m=(int)((Math.cos((distance*distance)/532.0)+1)*127); c=new Color(k%255,l%255,m%255); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 200); jf.setLocation(0, 0); jf.add(new 光的衍射彩色()); jf.setTitle("光的衍射黑白"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } 衍射3: import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 光的衍射彩色边缘衰减 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<200;j++){ int distancei=i-250; int k=(int)((Math.cos((distancei*distancei)/635.0)+1)*127); int l=(int)((Math.cos((distancei*distancei)/473.0)+1)*127); int m=(int)((Math.cos((distancei*distancei)/532.0)+1)*127); double intensity; if(distancei*distancei>1200){ intensity=1200.0/(distancei*distancei); }else{ intensity=1; } c=new Color((int)(k%255*intensity),(int)(l%255*intensity),(int)(m%255*intensity)); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 200); jf.setLocation(0, 0); jf.add(new 光的衍射彩色边缘衰减()); jf.setTitle("光的衍射黑白"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } 牛顿环1: import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 牛顿环黑白 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<500;j++){ int distancei=i-250; int distancej=j-250; int k=(int)((Math.sin((distancei*distancei+distancej*distancej)/400.0)+1)*127); c=new Color(k%255,k%255,k%255); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 500); jf.setLocation(0, 0); jf.add(new 牛顿环黑白()); jf.setTitle("牛顿环黑白"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } 牛顿环2: import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 牛顿环彩色 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<500;j++){ int distancei=i-250; int distancej=j-250; int k=(int)((Math.sin((distancei*distancei+distancej*distancej)/635.0)+1)*127); int l=(int)((Math.sin((distancei*distancei+distancej*distancej)/473.0)+1)*127); int m=(int)((Math.sin((distancei*distancei+distancej*distancej)/532.0)+1)*127); c=new Color(k%255,l%255,m%255); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 500); jf.setLocation(0, 0); jf.add(new 牛顿环彩色()); jf.setTitle("牛顿环彩色"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } 牛顿环3: import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class 牛顿环彩色边缘衰减 extends JPanel{ public int DIM=1024; public void paint(Graphics g){ super.paint(g); Color c; for(int i=0;i<500;i++){ for(int j=0;j<500;j++){ int distancei=i-250; int distancej=j-250; int k=(int)((Math.sin((distancei*distancei+distancej*distancej)/635.0)+1)*127); int l=(int)((Math.sin((distancei*distancei+distancej*distancej)/473.0)+1)*127); int m=(int)((Math.sin((distancei*distancei+distancej*distancej)/532.0)+1)*127); double intensity; if(distancei*distancei+distancej*distancej>1200){ intensity=1200.0/(distancei*distancei+distancej*distancej); }else{ intensity=1; } c=new Color((int)(k%255*intensity),(int)(l%255*intensity),(int)(m%255*intensity)); g.setColor(c); g.fillRect(i, j, 1, 1); } } } public static void main(String[] args) { JFrame jf; jf=new JFrame(); jf.setSize(500, 500); jf.setLocation(0, 0); jf.add(new 牛顿环彩色边缘衰减()); jf.setTitle("牛顿环彩色边缘衰减"); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } }
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2017-10-24
2017-11-23
达内就业喜报
更多>Java开班时间
-
北京 丨 11月27日
火速抢座 -
上海 丨 11月27日
火速抢座 -
广州 丨 11月27日
火速抢座 -
兰州 丨 11月27日
火速抢座 -
杭州 丨 11月27日
火速抢座 -
南京 丨 11月27日
火速抢座 -
沈阳 丨 11月27日
火速抢座 -
大连 丨 11月27日
火速抢座 -
长春 丨 11月27日
火速抢座 -
哈尔滨 丨 11月27日
火速抢座 -
济南 丨 11月27日
火速抢座 -
青岛 丨 11月27日
火速抢座 -
烟台 丨 11月27日
火速抢座 -
西安 丨 11月27日
火速抢座 -
天津 丨 11月27日
火速抢座 -
石家庄 丨 11月27日
火速抢座 -
保定 丨 11月27日
火速抢座 -
郑州 丨 11月27日
火速抢座 -
合肥 丨 11月27日
火速抢座 -
太原 丨 11月27日
火速抢座 -
苏州 丨 11月27日
火速抢座 -
武汉 丨 11月27日
火速抢座 -
成都 丨 11月27日
火速抢座 -
重庆 丨 11月27日
火速抢座 -
厦门 丨 11月27日
火速抢座 -
福州 丨 11月27日
火速抢座 -
珠海 丨 11月27日
火速抢座 -
南宁 丨 11月27日
火速抢座 -
东莞 丨 11月27日
火速抢座 -
贵阳 丨 11月27日
火速抢座 -
昆明 丨 11月27日
火速抢座 -
洛阳 丨 11月27日
火速抢座 -
临沂 丨 11月27日
火速抢座 -
潍坊 丨 11月27日
火速抢座 -
运城 丨 11月27日
火速抢座 -
呼和浩特丨11月27日
火速抢座 -
长沙 丨 11月27日
火速抢座 -
南昌 丨 11月27日
火速抢座 -
宁波 丨 11月27日
火速抢座 -
深圳 丨 11月27日
火速抢座 -
大庆 丨 11月27日
火速抢座