📄 mgclinearnetwork.cpp
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement. The various license agreements may be found at
// the Magic Software web site. This file is subject to the license
//
// FREE SOURCE CODE
// http://www.magic-software.com/License/free.pdf
#include "MgcLinearNetwork.h"
//----------------------------------------------------------------------------
MgcLinearNetwork::MgcLinearNetwork (int iVertexQuantity, MgcVector2* akVertex,
MgcReal* afF)
:
MgcTriangleNetwork(iVertexQuantity,akVertex)
{
assert( afF );
m_afF = afF;
}
//----------------------------------------------------------------------------
MgcLinearNetwork::MgcLinearNetwork (MgcTriangleNetwork& rkNet, MgcReal* afF)
:
MgcTriangleNetwork(rkNet)
{
assert( afF );
m_afF = afF;
}
//----------------------------------------------------------------------------
MgcLinearNetwork::~MgcLinearNetwork ()
{
delete[] m_afF;
}
//----------------------------------------------------------------------------
bool MgcLinearNetwork::Evaluate (const MgcVector2& rkPoint, MgcReal& rfF)
{
// determine which triangle contains the target point
MgcVector2 kV0, kV1, kV2;
int i;
for (i = 0; i < m_iTriangleQuantity; i++)
{
Triangle& rkTri = m_akTriangle[i];
kV0 = m_akVertex[rkTri.m_aiVertex[0]];
kV1 = m_akVertex[rkTri.m_aiVertex[1]];
kV2 = m_akVertex[rkTri.m_aiVertex[2]];
if ( InTriangle(kV0,kV1,kV2,rkPoint) )
break;
}
if ( i == m_iTriangleQuantity )
{
// point is outside interpolation region
return false;
}
// the input point is in this triangle
Triangle& rkTri = m_akTriangle[i];
// compute barycentric coordinates with respect to subtriangle
MgcReal afBary[3];
ComputeBarycenter(kV0,kV1,kV2,rkPoint,afBary);
// compute barycentric combination of function values at vertices
rfF = afBary[0]*m_afF[rkTri.m_aiVertex[0]] +
afBary[1]*m_afF[rkTri.m_aiVertex[1]] +
afBary[2]*m_afF[rkTri.m_aiVertex[2]];
return true;
}
//----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -