Exemplo n.º 1
0
        void drawEnvelope(Graphics myGraph)
        {
            lineCoord      myLine;
            int            nmbInterv    = (int)((xMaxReal + Math.Abs(xMinReal)) / xStepReal + 1);
            float          xPrevReal    = xMinReal;
            experimentData experiment_t = myExperiment;

            experiment_t.slitNum = 1;
            float intensityPrev = intensityByCoord(experiment_t, xPrevReal);

            Pen greenPen = new Pen(Color.Green);

            greenPen.Width = 1;

            for (int i = 0; i < nmbInterv; i++)
            {
                float xReal         = xPrevReal + xStepReal;
                float intensityReal = intensityByCoord(experiment_t, xReal);
                myLine.x1 = (int)(Map(xPrevReal, xMinReal, xMaxReal, 0, graphBox.Width));
                myLine.x2 = (int)(Map(xReal, xMinReal, xMaxReal, 0, graphBox.Width));
                myLine.y1 = graphBox.Height - (int)(Map(intensityPrev, yMinReal, yMaxReal, 0, graphBox.Height - yOffset));
                myLine.y2 = graphBox.Height - (int)(Map(intensityReal, yMinReal, yMaxReal, 0, graphBox.Height - yOffset));

                myGraph.DrawLine(greenPen, myLine.x1, myLine.y1 - yOffset, myLine.x2, myLine.y2 - yOffset);
                xPrevReal     = xReal;
                intensityPrev = intensityReal;
            }
        }
Exemplo n.º 2
0
 double intensityByCoord(experimentData experiment, double x)
 {
     if (x == 0)
     {
         return(1);
     }
     else if (experiment.slitNum == 1)
     {
         return((double)Math.Pow((Math.Sin((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen)) / ((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen))), 2));
     }
     else if (experiment.slitNum == 2)
     {
         return((double)(Math.Pow((Math.Sin((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen)) / ((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen))), 2) * (1 + Math.Cos((2 * Math.PI * experiment.slitPeriod * x) / (experiment.waveLength * experiment.lengthToScreen))) / 2));
     }
     else
     {
         return((double)(Math.Pow((Math.Sin((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen)) / ((Math.PI * experiment.slitWidth * x) / (experiment.waveLength * experiment.lengthToScreen))), 2) * Math.Pow((Math.Sin((experiment.slitNum * Math.PI * experiment.slitPeriod * Math.Sin(x)) / (experiment.waveLength * experiment.lengthToScreen)) / (Math.Sin((Math.PI * experiment.slitPeriod * Math.Sin(x)) / (experiment.waveLength * experiment.lengthToScreen)) * experiment.slitNum)), 2)));
     }
 }