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

教程

以下是使用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


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值