欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

点到三角形的距离(三维)-使用Geometric Tools库

程序员文章站 2022-03-02 10:48:42
...

教程

以下是使用Geometric Tools库,计算点到三角形面距离的教程。

程序库

已经编译好的库文件

下载地址为:

https://download.csdn.net/download/u011091739/10508026

项目配置

将下载好的资源解压到需要的文件夹,我的是:D:\sources\GeometricTools\GTEngine

debug环境下:

在C++ Include目录中添加:D:\sources\GeometricTools\GTEngine\Include

在C++库目录中添加:D:\sources\GeometricTools\GTEngine\_Output\v120\Win32\Debug

在编译->连接器中添加:GTEngine.v12.lib

release环境下:

在C++ Include目录中添加:D:\sources\GeometricTools\GTEngine\Include

在C++库目录中添加:D:\sources\GeometricTools\GTEngine\_Output\v120\Win32\Release

在编译->连接器中添加:GTEngine.v12.lib

下载编译

源代码下载地址①https://www.geometrictools.com/Downloads/GeometricToolsEngine3p13.zip

    ②https://download.csdn.net/download/u011091739/10500786

源代码就有对应的visual studio c++解决方案,选择适合的环境(debug/release、win32/x64),然后生成就可以了,就可以在_Output文件夹下面生成需要的库文件。

示例代码:

#include "Mathematics/GteDistPointTriangle.h"

#include <iostream>
//=============================DistPointtoTriangle()============================
/// @brief <对函数进行概括说明>
///
/// <对函数进行详细说明>
///
/// @param [in] _point 指向大小为3 的double数组,存放了需要计算的点的坐标
/// @param [in] _triangle 指向大小为9 的double数组,依次存放了三角形三个点的坐标
/// @param [out] closetPt 指向大小为3 的double数组,用于存放计算出来的最近点的坐标
///
/// @return 顶点到三角形的最近距离
///
/// @remark <函数特别说明>
///
/// @code
///      <在此添加示例代码>
/// @endcode
///
/// @sa <可以参考的类或函数,用空格分隔,函数名称后必须加()>
//================================================================================
double DistPointtoTriangle(double * _point,
	double * _triangle,
	double * closetPt)
{
	typedef gte::Vector<3, double> gteVec3;
	typedef gte::Triangle<3, double> gteTri;

	gteVec3 vecPt, v1, v2, v3;
	vecPt[0] = _point[0];
	vecPt[1] = _point[1];
	vecPt[2] = _point[2];
	v1[0] = _triangle[0];
	v1[1] = _triangle[1];
	v1[2] = _triangle[2];
	v2[0] = _triangle[3];
	v2[1] = _triangle[4];
	v2[2] = _triangle[5];
	v3[0] = _triangle[6];
	v3[1] = _triangle[7];
	v3[2] = _triangle[8];

	gteTri tri(v1, v2, v3);

	typedef gte::DCPQuery<double, gteVec3, gteTri> gteDCP;
	gteDCP solver;
	gteDCP::Result result = solver(vecPt, tri);

	//std::cout << "distance: " << result.distance << " " << result.sqrDistance << "\n";
	//std::cout << "barycentric coordinates: " << result.parameter[0] << " " << result.parameter[1] << " " << result.parameter[2] << "\n";
	//std::cout << "closet point: " << result.closest[0] << " " << result.closest[1] << " " << result.closest[2] << "\n";

	closetPt[0] = result.closest[0];
	closetPt[1] = result.closest[1];
	closetPt[2] = result.closest[2];

	return result.distance;
}

原文

在处理三维网格的时候,会遇到使用点到点距离、点到面距离、面到面距离(只讨论欧氏距离)等信息。点到点的距离很好计算,后面两者计算就很麻烦。最近在网上找到了一个很强大的几何图形处理库,利用其可以很方便的计算点到三角形的距离。

点到三角形距离文档:https://www.geometrictools.com/Documentation/DistancePoint3Triangle3.pdf

该pdf详细讲解了如何计算点到三角形的距离。

点到三角形距离实现代码:https://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistPointTriangle.h

该头文件实现了计算n维(n>=2)中,点到三角形的距离。

GeometricTools首页:https://www.geometrictools.com/index.html

开源代码下载地址:①https://www.geometrictools.com/Downloads/GeometricToolsEngine3p13.zip

    ②https://download.csdn.net/download/u011091739/10500786


相关标签: 几何图形