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