// calculate sscan element delays // Every beam's element delays are different // so Sscan delay is a two dimension array // first dimension is beam, second dimension is element public static double[][] GetSscanDelays( List <Point> elementPositions, // elements' positions double velocity, // Test block's velocity, in m/s SscanModel sscanModel // Focal point's true depth, in mm ) { var angles = GetSscanAngles(sscanModel); double[][] delays = new double[angles.Count][]; int elemNum = elementPositions.Count; // Loop through each angle beam for (int angleIndex = 0; angleIndex < angles.Count; angleIndex++) { // calculate focal point double focalY = sscanModel.FocusDepth; // focalX = Tan(angle) * Focus depth double focalX = Math.Tan(angles[angleIndex] * Math.PI / 180) * sscanModel.FocusDepth; Point focalPoint = new Point(focalX, focalY); Debug.WriteLine($"Beam Angle: {angles[angleIndex]}," + $" Focal Point: X {focalPoint.X} Y {focalPoint.Y}"); // calculate delays delays[angleIndex] = GetElementDelays(elementPositions, velocity, focalPoint); } return(delays); }
// calculate angles public static List <double> GetSscanAngles(SscanModel sscanModel) { List <double> angles = new List <double>(); var angle = sscanModel.StartAngle; while (angle <= sscanModel.EndAngle) { angles.Add(angle); angle = angle + sscanModel.AngleResolution; } return(angles); }