Example #1
0
        public void Compute(IAgStkRadarClutterMapComputeParams computeParams)
        {
            IAgCRSignal             signal       = computeParams.Signal;
            IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatch;

            double signalPower = signal.Power;
            double patchArea   = clutterPatch.Area;

            double patchClutterCoeff = ConstantCoefficient;

            if (ApplyGrazingMask)
            {
                IAgStkRadarPosVelProvider patchPosVel = clutterPatch.PosVelProvider;

                CartVec patchPosCBF = new CartVec(patchPosVel.PositionCBFArray);

                IAgStkRadarLink           radarLink     = computeParams.RadarLink;
                IAgStkRadarLinkGeometry   radarLinkGeom = radarLink.Geometry;
                IAgStkRadarPosVelProvider rdrRcvrPosVel = radarLinkGeom.ReceiveRadarPosVelProvider;

                CartVec rcvRdrPosCBF = new CartVec(rdrRcvrPosVel.PositionCBFArray);
                CartVec relPosCbf    = patchPosCBF - rcvRdrPosCBF;

                CartVec surfaceNorm = new CartVec(patchPosVel.SurfaceNormalDeticArray);

                double grazingAngle = m_halfPi - CartVec.AngleBetween(surfaceNorm, relPosCbf);
                if (grazingAngle < 0.0)
                {
                    grazingAngle = m_halfPi;
                }

                patchClutterCoeff = patchClutterCoeff * (grazingAngle / m_halfPi);
            }

            signal.Power += patchClutterCoeff * patchArea;

            IAgCRPolarization signalPol = signal.Polarization;

            if (signalPol != null)
            {
                signal.Polarization = computeParams.ConstructOrthogonalPolarization(signalPol);
            }
        }
Example #2
0
        public void Compute(IAgStkRadarClutterGeometryComputeParams computeParams)
        {
            IAgStkRadarLink           radarLink     = computeParams.RadarLink;
            IAgStkRadarLinkGeometry   radarLinkGeom = radarLink.Geometry;
            IAgStkRadarPosVelProvider xmtRdrPosVel  = radarLinkGeom.TransmitRadarPosVelProvider;

            CartVec xmtRdrPosCBF = new CartVec(xmtRdrPosVel.PositionCBFArray);

            m_cbIntersectComputeParams.SetBasePositionCBF(xmtRdrPosCBF.X, xmtRdrPosCBF.Y, xmtRdrPosCBF.Z);

            double sinOffset = Math.Sin(m_halfPi - OffsetAngle);
            double cosOffset = Math.Cos(m_halfPi - OffsetAngle);

            //==============================  First Point Start ======================================================
            CartVec pt1Cbf = new CartVec(xmtRdrPosVel.ConvertBodyCartesianToCBFCartesianArray(cosOffset, 0.0, sinOffset));

            m_cbIntersectComputeParams.SetDirectionCBF(pt1Cbf.X, pt1Cbf.Y, pt1Cbf.Z);

            IAgStkRadarCBIntersectComputeResult pIntersectResult1 = xmtRdrPosVel.ComputeCentralBodyIntersect(m_cbIntersectComputeParams);

            if (pIntersectResult1.IntersectionFound)
            {
                IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatches.Add();

                CartVec intersectPt = new CartVec(pIntersectResult1.Intercept1CBFArray);
                clutterPatch.SetPositionCBF(intersectPt.X, intersectPt.Y, intersectPt.Z);
                clutterPatch.Area = PatchArea;
            }
            //==============================  Second Point Start ======================================================
            CartVec pt2Cbf = new CartVec(xmtRdrPosVel.ConvertBodyCartesianToCBFCartesianArray(-cosOffset, 0.0, sinOffset));

            m_cbIntersectComputeParams.SetDirectionCBF(pt2Cbf.X, pt2Cbf.Y, pt2Cbf.Z);

            IAgStkRadarCBIntersectComputeResult pIntersectResult2 = xmtRdrPosVel.ComputeCentralBodyIntersect(m_cbIntersectComputeParams);

            if (pIntersectResult2.IntersectionFound)
            {
                IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatches.Add();

                CartVec intersectPt = new CartVec(pIntersectResult2.Intercept1CBFArray);
                clutterPatch.SetPositionCBF(intersectPt.X, intersectPt.Y, intersectPt.Z);
                clutterPatch.Area = PatchArea;
            }
            //==============================  Third Point Start ======================================================
            CartVec pt3Cbf = new CartVec(xmtRdrPosVel.ConvertBodyCartesianToCBFCartesianArray(0.0, cosOffset, sinOffset));

            m_cbIntersectComputeParams.SetDirectionCBF(pt3Cbf.X, pt3Cbf.Y, pt3Cbf.Z);

            IAgStkRadarCBIntersectComputeResult pIntersectResult3 = xmtRdrPosVel.ComputeCentralBodyIntersect(m_cbIntersectComputeParams);

            if (pIntersectResult3.IntersectionFound)
            {
                IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatches.Add();

                CartVec intersectPt = new CartVec(pIntersectResult3.Intercept1CBFArray);
                clutterPatch.SetPositionCBF(intersectPt.X, intersectPt.Y, intersectPt.Z);
                clutterPatch.Area = PatchArea;
            }
            //==============================  Fourth Point Start ======================================================
            CartVec pt4Cbf = new CartVec(xmtRdrPosVel.ConvertBodyCartesianToCBFCartesianArray(0.0, -cosOffset, sinOffset));

            m_cbIntersectComputeParams.SetDirectionCBF(pt4Cbf.X, pt4Cbf.Y, pt4Cbf.Z);

            IAgStkRadarCBIntersectComputeResult pIntersectResult4 = xmtRdrPosVel.ComputeCentralBodyIntersect(m_cbIntersectComputeParams);

            if (pIntersectResult4.IntersectionFound)
            {
                IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatches.Add();

                CartVec intersectPt = new CartVec(pIntersectResult4.Intercept1CBFArray);
                clutterPatch.SetPositionCBF(intersectPt.X, intersectPt.Y, intersectPt.Z);
                clutterPatch.Area = PatchArea;
            }
        }