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; } }
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))); } }