起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 用Java模拟光的单缝衍射和牛顿环

用Java模拟光的单缝衍射和牛顿环

时间:2021-07-29 15:15:27来源:Java开发培训网 作者:Java开发教程网 已有: 名学员访问该课程

前言:记得高中物理中的光的单缝衍射和牛顿环的图案吗?如果忘了,现在去百度一下,相信你马上就能回想起来它的大概

记得高中物理中的光的单缝衍射和牛顿环的图案吗?如果忘了,现在去百度一下,相信你马上就能回想起来它的大概内容。我做了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);
}
}

文章出自:http://qh.itpxw.cn/peixun/software/202190819.html

文章标题:用Java模拟光的单缝衍射和牛顿环



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容