添加 CGAL 点的正确方法 api-wise
Proper way of adding CGAL points api-wise
我有一个由三个顶点定义的三角形。顶点的类型为 Point = CGAL::Point_2<K>
,内核为 Simple_cartersian<double>
。
我想随机抽样这个三角形,为此我使用了一个公式 (https://math.stackexchange.com/questions/18686/uniform-random-point-in-triangle-in-3d),它将三角形的三个顶点乘以一些随机因子。
Point = Point(0, 0) + //
(1 - std::sqrt(r1)) * (standardTriangle[0] - Point(0, 0)) + //
(std::sqrt(r1) * (1 - r2)) * (standardTriangle[1] - Point(0, 0)) +
(r2 * std::sqrt(r1)) * (standardTriangle[2] - Point(0, 0)));
这看起来很麻烦,因为我需要通过减去 Point(0,0) 将点转换为向量,然后我需要将所有内容添加到原点上的点。
像下面这样做看起来更自然
Point = (1 - std::sqrt(r1)) * standardTriangle[0] + //
(std::sqrt(r1) * (1 - r2)) * standardTriangle[1] +
(r2 * std::sqrt(r1)) * standardTriangle[2]);
从原点添加和删除点确实是对点求和的唯一方法,即使在数学上这是不正确的?
您可能需要使用 barycenter()
函数。
如果您需要另一份样品,可以在 CGAL 中找到。参见 here
我有一个由三个顶点定义的三角形。顶点的类型为 Point = CGAL::Point_2<K>
,内核为 Simple_cartersian<double>
。
我想随机抽样这个三角形,为此我使用了一个公式 (https://math.stackexchange.com/questions/18686/uniform-random-point-in-triangle-in-3d),它将三角形的三个顶点乘以一些随机因子。
Point = Point(0, 0) + //
(1 - std::sqrt(r1)) * (standardTriangle[0] - Point(0, 0)) + //
(std::sqrt(r1) * (1 - r2)) * (standardTriangle[1] - Point(0, 0)) +
(r2 * std::sqrt(r1)) * (standardTriangle[2] - Point(0, 0)));
这看起来很麻烦,因为我需要通过减去 Point(0,0) 将点转换为向量,然后我需要将所有内容添加到原点上的点。
像下面这样做看起来更自然
Point = (1 - std::sqrt(r1)) * standardTriangle[0] + //
(std::sqrt(r1) * (1 - r2)) * standardTriangle[1] +
(r2 * std::sqrt(r1)) * standardTriangle[2]);
从原点添加和删除点确实是对点求和的唯一方法,即使在数学上这是不正确的?
您可能需要使用 barycenter()
函数。
如果您需要另一份样品,可以在 CGAL 中找到。参见 here