美国上市公司,专注Java培训21年

用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答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • 一个故事讲完https
    一个故事讲完https
    感谢大家阅读由java培训机构分享的“一个故事讲完https”希望对大家有所帮助 详情>>

    2017-08-31

  • GitHub 上火的 Java 框架
    GitHub 上火的 Java 框架
    Java 是目前最需要的编程语言之一。在这里,我们已经挖掘了一些关于框架趋势的有用信息,也就是最受开发者青睐的 Java 框架,名单如下 详情>>

    2017-10-24

  • Java入门学习路径,没有之一
    Java入门学习路径,没有之一
    作为刚刚进入Java领域的新同学,无论是高校的毕业大学生,还是有志转行的在职人员,都面临着诸多的困惑。今天java培训班就来为大家讲解下Java入门学习路径 详情>>

    2017-11-23

  • java初学者学习心得
    java初学者学习心得
    学习了一学期的Java课程,觉得是该总结自己的心得体会了。开始学习任何一门课(包括java),兴趣最重要。下面请看java培训机构带来的分享 详情>>

    2017-12-12

  • Java开班时间

    收起