資源簡介
采用C++ 切片法計算封閉三維模型(三角形網(wǎng)格模型)的體積。計算速度快,計算準(zhǔn)確。
代碼片段和文件信息
#include?
double?Distance(double?*a?double?*b)
{
double?o?=?(a[0]?-?b[0])*(a[0]?-?b[0]);
double?p?=?(a[1]?-?b[1])*(a[1]?-?b[1]);
double?q?=?(a[2]?-?b[2])*(a[2]?-?b[2]);
return?o?+?p?+?q;
}
double
vol_cut(std::string?stlfile)
{
/**********/
std::cout?<“進(jìn)行體積計算...“?< //讀取STL----》reader
vtkSmartPointer?reader?=
vtkSmartPointer::New();
reader->SetFileName(stlfile.c_str());
reader->Update();
vtkSmartPointer?inputPolyData?=?vtkSmartPointer::New();
inputPolyData?=?reader->GetOutput();
//創(chuàng)建切割平面
vtkSmartPointer?plane?=?vtkSmartPointer::New();
plane->SetOrigin(inputPolyData->GetCenter());//設(shè)置切割平面起點
plane->SetNormal(1?0?0);//設(shè)置切割方向為X方向
//得到輸入的STL模型的最小坐標(biāo)
double?minBound[3];
minBound[0]?=?inputPolyData->GetBounds()[0];
minBound[1]?=?inputPolyData->GetBounds()[2];
minBound[2]?=?inputPolyData->GetBounds()[4];
std::cout?<“??最小點:“?< //得到輸入的STL模型的最小大坐標(biāo)
double?maxBound[3];
maxBound[0]?=?inputPolyData->GetBounds()[1];
maxBound[1]?=?inputPolyData->GetBounds()[3];
maxBound[2]?=?inputPolyData->GetBounds()[5];
std::cout?<“??最大點:“?< //得到輸入的STL模型的中心坐標(biāo)
double?center[3];
center[0]?=?inputPolyData->GetCenter()[0];
center[1]?=?inputPolyData->GetCe
評論
共有 條評論