Example #1
0
        /// <summary>
        /// 求绕射场场强,文档公式1
        /// </summary>
        public static EField GetDiffractionEField(EField RayEFieldAtDiffractionPoint, RayInfo ray, Face diffractionFace1, Face diffractionFace2, Point diffractionPoint, Point viewPoint, double frequence)
        {
            if ((RayEFieldAtDiffractionPoint == null) || (ray == null) || (diffractionFace1 == null) || (diffractionFace2 == null) ||
                (diffractionPoint == null) || (viewPoint == null))
            {
                throw new Exception("绕射场强计算输入的参数中有参数是null");
            }
            //
            AdjacentEdge sameEdge                = new AdjacentEdge(diffractionFace1, diffractionFace2);                                                                                //获取劈边
            double       waveLength              = 300.0 / frequence;                                                                                                                   //波长
            Plural       PluralOfVerticalEField  = EField.GetVerticalE(RayEFieldAtDiffractionPoint, ray.RayVector, sameEdge.LineVector);                                                //获得电场的垂直分量
            Plural       PluralOfHorizonalEField = EField.GetHorizonalE(RayEFieldAtDiffractionPoint, ray.RayVector, sameEdge.LineVector);                                               //获得电场的水平分量
            double       Ad   = GetSpreadFactor(ray.Origin, sameEdge, diffractionPoint, viewPoint, waveLength);                                                                         //获得空间衰减的扩散因子
            double       k    = 2 * Math.PI / waveLength;                                                                                                                               //波矢量
            double       s2   = diffractionPoint.GetDistance(viewPoint);                                                                                                                //绕射点到观察点的距离
            Plural       ejks = new Plural(Math.Cos(k * s2), -Math.Sin(k * s2));                                                                                                        //exp(-jks),相位
            Plural       verticalDiffractionFactor          = GetDiffractionFactor(ray, diffractionFace1, diffractionFace2, sameEdge, diffractionPoint, viewPoint, waveLength, true);;  //垂直极化波入射时的绕射系数D
            Plural       PluralOfVerticalDiffractionEField  = Plural.PluralMultiplyDouble(PluralOfVerticalEField * verticalDiffractionFactor * ejks, Ad);                               //垂直极化波入射时的绕射场
            Plural       horizonalDiffractionFactor         = GetDiffractionFactor(ray, diffractionFace1, diffractionFace2, sameEdge, diffractionPoint, viewPoint, waveLength, false);; //水平极化波入射时的绕射系数D
            Plural       PluralOfHorizonalDiffractionEField = Plural.PluralMultiplyDouble(horizonalDiffractionFactor * PluralOfHorizonalEField * ejks, Ad);                             //水平极化波入射时的绕射场
            SpectVector  vectorOfDiffractionRay             = new SpectVector(diffractionPoint, viewPoint);                                                                             //绕射波的方向
            //垂直极化波绕射后的绕射场
            SpectVector vectorOfVerticalDiffractionEField = GetVectorOfVerticalEField(vectorOfDiffractionRay, sameEdge.LineVector);                                                     //获得电场的垂直分量的方向
            EField      verticalDiffractionEField         = GetXYZComponentOfTotalEField(PluralOfVerticalDiffractionEField, vectorOfVerticalDiffractionEField);
            //水平极化波绕射后的绕射场
            SpectVector vectorOfHorizonalDiffractionEField = GetVectorOfHorizonalEField(vectorOfDiffractionRay, sameEdge.LineVector);                                                                                                       //获得电场的水平分量的方向
            EField      horizonalDiffractionEField         = GetXYZComponentOfTotalEField(PluralOfHorizonalDiffractionEField, vectorOfHorizonalDiffractionEField);
            EField      diffractionEField = new EField(verticalDiffractionEField.X + horizonalDiffractionEField.X, verticalDiffractionEField.Y + horizonalDiffractionEField.Y, verticalDiffractionEField.Z + horizonalDiffractionEField.Z); //绕射场

            return(diffractionEField);
        }
Example #2
0
        //求反射电场强度的垂直分量
        private static EField VerticalEfield(EField e, RayInfo rayIn, SpectVector l, double ReflectAngle, double Conduct, double Epara, double s1, double s2, double f)
        {
            Plural VEi     = EField.GetVerticalE(e, rayIn.RayVector, l);
            Plural V       = VerticalReflectance(ReflectAngle, Conduct, f, Epara);
            Plural A       = new Plural(s1 / (s1 + s2));
            Plural E       = VEi * V * A * GetPhase(s1, s2, f);
            EField Vefield = SpectVector.VectorDotMultiply(E, SpectVector.VectorCrossMultiply(rayIn.RayVector, l));

            return(Vefield);
        }
Example #3
0
        //求透射电场强度的垂直分量by Zhuo Liu 2015,3,24:
        //private Efield GetVerticalEfield(Efield e, RayInfo rayIn, RayInfo rayOut, VectorInSpace lVector, double Conduct, double Epara, double inDistance, double outDistance, double inputFrequency)
        public EField GetVerticalEfield()
        {
            //当入射波和相交面垂直时,求水平分量和垂直分量没有意义
            if (rayIn.RayVector.IsParallelAndSamedirection(intersectionFace.NormalVector))
            {
                return(null);
            }
            //原static语句:double reflectAngle = SpectVector.VectorPhase(rayIn.RayVector, l);
            Plural verticalOfE = e.GetVerticalE(rayIn.RayVector, verticalVector);
            Plural vertiValue  = GetVerticalRefractance();
            Plural A           = new Plural(inDistance / (inDistance + outDistance));
            Plural E           = verticalOfE * vertiValue * A * GetPhase();

            // 原static语句:Efield Vefield = SpectVector .VectorDotMultiply (E, VectorInSpace.VectorCrossMultiply (rayIn .RayVector ,l ));
            SpectVector tempVector = rayIn.RayVector.CrossMultiplied(verticalVector).GetNormalizationVector();

            return(tempVector.DotMultiplied(E));
        }