首页 > 解决方案 > 以 api 方式添加 CGAL 点的正确方法

问题描述

我有一个由它的三个顶点定义的三角形。顶点是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]);

从原点添加和删除点实际上是求和点的唯一方法,即使在数学上这是不正确的?

标签: cgal

解决方案


您可能想要使用该barycenter()功能。

如果您需要另一个采样,CGAL 中有一个可用的采样。看这里


推荐阅读