AGI AgRadarPlugin 11 Send comments on this topic.
ComputeCentralBodyIntersect Method (IAgStkRadarPosVelProvider)
See Also  Example
cbIntersectComputeParams





Description

Computes the central body intersection.

Syntax

Parameters

cbIntersectComputeParams

Remarks

The ComputeCentralBodyIntersect method will set the IntersectionFound property of the returned IAgStkRadarCBIntersectComputeResult interface to true if the direction vector specified by the IAgStkRadarCBIntersectComputeParams input argument will intersect the central body and false otherwise.  The origin of the direction vector is specified by the base vector.  The intercept1 and intercept2 vectors are points of intersection with the central body.  The multiplier1 and multiplier2 values represent scalars by which the direction vector is multiplied and then added to the base vector to yield the intersection points.  The multipliers may be positive or negative depending on if the intersections occur in the positive or negative direction.

Example

C# Copy Code
IAgStkRadarLink radarLink = computeParams.RadarLink; 
IAgStkRadarLinkGeometry radarLinkGeom = radarLink.Geometry; 
IAgStkRadarPosVelProvider xmtRdrPosVel = radarLinkGeom.TransmitRadarPosVelProvider; 
 
CartVec xmtRdrPosCBF = new CartVec(xmtRdrPosVel.PositionCBFArray); 
 
IAgStkRadarCBIntersectComputeParams cbIntersectComputeParams = new AgStkRadarCBIntersectComputeParams() as IAgStkRadarCBIntersectComputeParams; 
cbIntersectComputeParams.SetBasePositionCBF(xmtRdrPosCBF.X, xmtRdrPosCBF.Y, xmtRdrPosCBF.Z); 
 
double sinOffset = Math.Sin(m_halfPi - OffsetAngle); 
double cosOffset = Math.Cos(m_halfPi - OffsetAngle); 
 
CartVec pt1Cbf = new CartVec(xmtRdrPosVel.ConvertBodyCartesianToCBFCartesianArray(cosOffset, 0.0, sinOffset)); 
cbIntersectComputeParams.SetDirectionCBF(pt1Cbf.X, pt1Cbf.Y, pt1Cbf.Z); 
 
IAgStkRadarCBIntersectComputeResult intersectResult1 = xmtRdrPosVel.ComputeCentralBodyIntersect(cbIntersectComputeParams); 
if (intersectResult1.IntersectionFound) 

    IAgStkRadarClutterPatch clutterPatch = computeParams.ClutterPatches.Add(); 
 
    CartVec intersectPt = new CartVec(intersectResult1.Intercept1CBFArray); 
    clutterPatch.SetPositionCBF(intersectPt.X, intersectPt.Y, intersectPt.Z); 
    clutterPatch.Area = PatchArea; 
}
C++ Copy Code
CComPtr<IAgStkRadarLink> pRadarLink; 
EXCEPTION_HR(computeParams->get_RadarLink(&pRadarLink)); 
 
CComPtr<IAgStkRadarLinkGeometry> pRadarLinkGeom; 
EXCEPTION_HR(pRadarLink->get_Geometry(&pRadarLinkGeom)); 
 
CComPtr<IAgStkRadarPosVelProvider> pXmtRdrPosVel; 
EXCEPTION_HR(pRadarLinkGeom->get_TransmitRadarPosVelProvider(&pXmtRdrPosVel)); 
 
CartVec xmtRdrPosCBF; 
EXCEPTION_HR(pXmtRdrPosVel->GetPositionCBF(&xmtRdrPosCBF.x, &xmtRdrPosCBF.y, &xmtRdrPosCBF.z)); 
 
CComPtr<IAgStkRadarCBIntersectComputeParams> pCbIntersectComputeParams; 
EXCEPTION_HR(pCbIntersectComputeParams.CoCreateInstance(__uuidof(AgStkRadarCBIntersectComputeParams))); 
 
EXCEPTION_HR(pCbIntersectComputeParams->SetBasePositionCBF(xmtRdrPosCBF.x, xmtRdrPosCBF.y, xmtRdrPosCBF.z)); 
 
CComPtr<IAgStkRadarClutterPatchCollection> pPatchCollection; 
EXCEPTION_HR(computeParams->get_ClutterPatches(&pPatchCollection)); 
 
VARIANT_BOOL intersectFound; 
double sinOffset = sin(AgCHALFPI - m_offsetAngle); 
double cosOffset = cos(AgCHALFPI - m_offsetAngle); 
 
CartVec pt1Cbf; 
EXCEPTION_HR(pXmtRdrPosVel->ConvertBodyCartesianToCBFCartesian(cosOffset, 0.0, sinOffset, &pt1Cbf.x, &pt1Cbf.y, &pt1Cbf.z)); 
EXCEPTION_HR(pCbIntersectComputeParams->SetDirectionCBF(pt1Cbf.x, pt1Cbf.y, pt1Cbf.z)); 
 
CComPtr<IAgStkRadarCBIntersectComputeResult> pIntersectResult1; 
EXCEPTION_HR(pXmtRdrPosVel->ComputeCentralBodyIntersect(pCbIntersectComputeParams, &pIntersectResult1)); 
EXCEPTION_HR(pIntersectResult1->get_IntersectionFound(&intersectFound)); 
if(intersectFound == VARIANT_TRUE) 

   CComPtr<IAgStkRadarClutterPatch> pClutterPatch; 
   EXCEPTION_HR(pPatchCollection->Add(&pClutterPatch)); 
 
   CartVec intersectPt; 
   EXCEPTION_HR(pIntersectResult1->GetIntercept1CBF(&intersectPt.x, &intersectPt.y, &intersectPt.z)); 
   EXCEPTION_HR(pClutterPatch->SetPositionCBF(intersectPt.x, intersectPt.y, intersectPt.z)); 
   EXCEPTION_HR(pClutterPatch->put_Area(m_patchArea)); 
}

See Also

© 2016 Analytical Graphics, Inc. All Rights Reserved.

STK Programming Interface 11.0.1