private static void ConvertParametersToBackSurfaceRayAndBack( LensRayTransferFunction.Parameters inputParams) { ConvertParametersToRayAndBack(inputParams, (parameters, lens) => lens.ConvertBackSurfaceRayToParameters(lens.ConvertParametersToBackSurfaceRay(parameters)) ); }
public void ComputeLrtfForRandomInput() { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); LensRayTransferFunction lrtf = new LensRayTransferFunction(lens); Random random = new Random(); for (int i = 0; i < 1000; i++) { var incomingParams = new LensRayTransferFunction.Parameters( random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble() ); LensRayTransferFunction.Parameters outgoingParams = lrtf.ComputeLrtf(incomingParams); if (outgoingParams != null) { if (outgoingParams.DirectionTheta < 0 || outgoingParams.DirectionTheta > 1 || outgoingParams.DirectionPhi < 0 || outgoingParams.DirectionPhi > 1 || outgoingParams.PositionTheta < 0 || outgoingParams.PositionTheta > 1 || outgoingParams.PositionPhi < 0 || outgoingParams.PositionPhi > 1) { Console.WriteLine("Warning: parameter outside [0; 1] interval."); Console.WriteLine("incoming: {0}", incomingParams); Console.WriteLine("outgoing: {0}", outgoingParams); Console.WriteLine(); } //Assert.InRange(outgoingParams.DirectionTheta, 0.0, 1.0); //Assert.InRange(outgoingParams.DirectionPhi, 0.0, 1.0); //Assert.InRange(outgoingParams.PositionTheta, 0.0, 1.0); //Assert.InRange(outgoingParams.PositionPhi, 0.0, 1.0); } } }
public void ComputeLrtfResultInCorrectInterval() { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); LensRayTransferFunction lrtf = new LensRayTransferFunction(lens); var incomingParams = new LensRayTransferFunction.Parameters(0.835057026164167, 0.375245163857585, 0.854223355117358, 0.000161428470239708); LensRayTransferFunction.Parameters outgoingParams = lrtf.ComputeLrtf(incomingParams); Console.WriteLine(outgoingParams); }
private static void ConvertParametersToRayAndBack( LensRayTransferFunction.Parameters inputParams, Func <LensRayTransferFunction.Parameters, ComplexLens, LensRayTransferFunction.Parameters> func) { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); var outputParams = func(inputParams, lens); Assert.Equal(inputParams.PositionTheta, outputParams.PositionTheta, 5); Assert.Equal(inputParams.PositionPhi, outputParams.PositionPhi, 5); Assert.Equal(inputParams.DirectionTheta, outputParams.DirectionTheta, 5); Assert.Equal(inputParams.DirectionPhi, outputParams.DirectionPhi, 5); }
public void ComputeLrtf() { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); LensRayTransferFunction lrtf = new LensRayTransferFunction(lens); var incomingParams = new LensRayTransferFunction.Parameters(0.5, 0.5, 0.7000000000000004, 0.0); LensRayTransferFunction.Parameters outgoingParams = lrtf.ComputeLrtf(incomingParams); Console.WriteLine("IN: {0}", incomingParams); Console.WriteLine("OUT: {0}", outgoingParams); if (outgoingParams != null) { Console.WriteLine(" {0}", lens.ConvertParametersToFrontSurfaceRay(outgoingParams)); } }
public void SampleLrtf() { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); LensRayTransferFunction lrtf = new LensRayTransferFunction(lens); var defaultParameters = new LensRayTransferFunction.Parameters(0.5, 0.5, 1.0, 0.5); var table = lrtf.SampleLrtf1D(defaultParameters, LensRayTransferFunction.VariableParameter.DirectionTheta, 101); //int i = 0; //foreach (LensRayTransferFunction.Parameters rayParams in table) //{ // Console.WriteLine("[{0}]: {1}", i, rayParams); // if (rayParams != null) // { // //Console.WriteLine(" {0}", lens.ConvertParametersToFrontSurfaceRay(rayParams)); // } // i++; //} Console.WriteLine("{{ {0} }}", string.Join(",\n", table.Select((item) => (item != null) ? item.ToString() : "Null").ToArray())); }
private void Recompute() { if (!initialized) { return; } double positionTheta = (double)positionThetaNumeric.Value; double positionPhi = (double)positionPhiNumeric.Value; double directionTheta = (double)directionThetaNumeric.Value; double directionPhi = (double)directionPhiNumeric.Value; var inputRay = new LensRayTransferFunction.Parameters( positionTheta, positionPhi, directionTheta, directionPhi); var variableParam = (LensRayTransferFunction.VariableParameter) variableParameterComboBox.SelectedValue; outgoingRays = lrtf.SampleLrtf1D(inputRay, variableParam, sampleCount); InvalidatePanels(); }
public void CompareInterpolatedLrtfValueWithOriginalOnes() { ComplexLens lens = ComplexLens.CreateDoubleGaussLens(Materials.Fixed.AIR, 4.0); LensRayTransferFunction lrtf = new LensRayTransferFunction(lens); int sampleCount = 128; string filename = string.Format(@"data\lrtf_double_gauss_{0}.bin", sampleCount); var table = lrtf.SampleLrtf3DCached(sampleCount, filename); Random random = new Random(); for (int i = 0; i < 1000; i++) { var incomingParams = new LensRayTransferFunction.Parameters( random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble() ); var outgoingParamsOriginal = lrtf.ComputeLrtf(incomingParams).ToVector4d(); var outgoingParamsInterpolated = table.EvaluateLrtf3D(incomingParams).ToVector4d(); //AssertEqualVector4d(outgoingParamsOriginal, outgoingParamsInterpolated); } }