AGI AgRadarPlugin 11 Send comments on this topic.
Compute Method (IAgStkRadarClutterMapPlugin)
See Also  Example
computeParams





Description

Clutter map plugin compute'

Syntax

[Visual Basic .NET]
Public Sub Compute( _
   ByVal computeParams As IAgStkRadarClutterMapComputeParams _
) 

[C#]
public void Compute(
IAgStkRadarClutterMapComputeParams computeParams
);

[Managed C++]
public: void Compute(
IAgStkRadarClutterMapComputeParams ^ computeParams
);

[Unmanaged C++]
public: HRESULT Compute(
IAgStkRadarClutterMapComputeParams * computeParams
);

Parameters

computeParams

Remarks

The Compute method is responsible for modifying the the power of the incoming signal returned by the Signal property of the computeParams input parameter by the clutter coefficient of the patch.  The signal represents the transmitted signal from the radar, which has been propagated to the clutter patch location.  The clutter map plugin may also modify any of the other settable properties of the signal to model the desired behavior.  The signal can be cast to the IAgStkRadarSignal interface to obtain radar signal specific data such as pulse repetition frequency (PRF).

Example

C# Copy Code
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); 
    } 
}
C++ Copy Code
STDMETHODIMP CExample1::Compute(IAgStkRadarClutterMapComputeParams* computeParams) 

    EX_BEGIN_PARAMS() 
        EX_IN_INTERFACE_PARAM(computeParams) 
    EX_END_PARAMS() 
 
    HRESULT hr = S_OK; 
 
    try 
    { 
        CComPtr pSignal; 
        EXCEPTION_HR(computeParams->get_Signal(&pSignal)); 
 
        CComPtr pClutterPatch; 
        EXCEPTION_HR(computeParams->get_ClutterPatch(&pClutterPatch)); 
 
        double signalPower = 0.0; 
        EXCEPTION_HR(pSignal->get_Power(&signalPower)); 
 
        double patchArea = 0.0; 
        EXCEPTION_HR(pClutterPatch->get_Area(&patchArea)); 
 
        double patchClutterCoeff = m_constantCoefficient; 
        if(m_applyGrazingMask) 
        { 
            CComPtr pPatchPosVel; 
            EXCEPTION_HR(pClutterPatch->get_PosVelProvider(&pPatchPosVel)); 
 
            CartVec patchPosCBF; 
            EXCEPTION_HR(pPatchPosVel->GetPositionCBF(&patchPosCBF.x, &patchPosCBF.y, &patchPosCBF.z)); 
 
            CComPtr pRadarLink; 
            EXCEPTION_HR(computeParams->get_RadarLink(&pRadarLink)); 
 
            CComPtr pRadarLinkGeom; 
            EXCEPTION_HR(pRadarLink->get_Geometry(&pRadarLinkGeom)); 
 
            CComPtr pRdrRcvrPosVel; 
            EXCEPTION_HR(pRadarLinkGeom->get_ReceiveRadarPosVelProvider(&pRdrRcvrPosVel)); 
 
            CartVec rcvRdrPosCBF; 
            EXCEPTION_HR(pRdrRcvrPosVel->GetPositionCBF(&rcvRdrPosCBF.x, &rcvRdrPosCBF.y, &rcvRdrPosCBF.z)); 
 
            CartVec relPosCbf = patchPosCBF - rcvRdrPosCBF; 
 
            CartVec surfaceNorm; 
            EXCEPTION_HR(pPatchPosVel->GetSurfaceNormalDetic(&surfaceNorm.x, &surfaceNorm.y, &surfaceNorm.z)); 
 
            double grazingAngle = AgCHALFPI - CartVec::AngleBetween(surfaceNorm, relPosCbf); 
            if(grazingAngle < 0.0) 
                grazingAngle = AgCHALFPI; 
 
            patchClutterCoeff = patchClutterCoeff * (grazingAngle / AgCHALFPI); 
        } 
 
        EXCEPTION_HR(pSignal->put_Power(signalPower * patchClutterCoeff * patchArea)); 
 
        CComPtr pSignalPol; 
        EXCEPTION_HR(pSignal->get_Polarization(&pSignalPol)); 
        if(pSignalPol) 
        { 
            CComPtr pSignalOrthoPol; 
            EXCEPTION_HR(computeParams->ConstructOrthogonalPolarization(pSignalPol, &pSignalOrthoPol)); 
            EXCEPTION_HR(pSignal->put_Polarization(pSignalOrthoPol)); 
        } 
 
    } 
    catch( HRESULT r ) 
    { 
        hr = r; 
    } 
    catch(...) 
    { 
        hr = E_FAIL; 
    } 
 
    return hr; 
}

See Also

© 2016 Analytical Graphics, Inc. All Rights Reserved.

STK Programming Interface 11.0.1