脊的方向
Orientation of ridge
在D维空间给定两个简单的(例如,二维三角形面在D3 空间对于四面体)相邻的切面V(可见)和H(水平),由D D维点 p V和 p H两个数组定义。上述数组中元素的顺序是严格定义的,相应地,在空间中定义facet 的方向。例如,他们在通称U点(涉及几何计算)的通称集合中的指标表示为两个std::list< std::size_t >
。脊是facet的D - 1维边界元素(例如,四面体在D3 空间中的一维边)。要定义哪些点对于两个切面是共同的,我可以简单地做以下操作:
point_list visible_set_ = visible_facet_.vertices_;
point_list horizon_set_ = horizon_facet_.vertices_;
visible_set_.sort();
horizon_set_.sort();
point_list ridge_;
std::set_intersection(visible_set_.cbegin(), visible_set_.cend(),
horizon_set_.cbegin(), horizon_set_.cend(),
std::back_inserter(ridge_));
但是在std::sort
执行期间,我丢失了关于脊R的共向性的信息,定义为上面的ridge_
,以及任何两个面的相同的脊。
共方向性可以通过计算交换数来定义,这最少需要执行从1.)脊的点的数组的排列,按照它在面的点的给定数组中呈现的顺序到2.)脊R本身产生的点的数组。但是我确定这里有开销
另一种定义共方向性的方法是计算两个facet的一个面向的正方形(一个由排他点构造(facet和脊的差异),然后是脊,另一个由facet的简单修改生成:将排他点移到前面,因为它位于两个facet中的第一个)
。如何执行两个元素顺序固定的未排序数组的交集,以便结果数组保存第一个(或第二个)数组中元素的顺序。是否存在这样的算法,时间复杂度小于O(n2)?特别感兴趣的是STL辅助实现的可能性。
如果我理解正确,您可以使用以下方案。首先,复制原始数组(称为visible_set_for_sorting
和horizon_set_for_sorting
)。然后把它们分类。然后按以下方式形成交集:
std::set<int> intersection;
std::set_intersection(
visible_set_for_sorting.begin(), visible_set_for_sorting.end(),
horizon_set_for_sorting.begin(), horizon_set_for_sorting.end(),
std::inserter(intersection, intersection.begin()));
现在您可以迭代任何原始数组(visible_set_
或horizon_set_
),检查点是否在intersection
中,并按所需顺序形成结果列表。
std::list<int> list;
for (int p : visible_set_)
{
if (intersection.find(p) != intersection.end())
{
list.push_back(p);
}
}
复杂度不应高于0 (N*log(N))
我的版本将独占点替换为最远点,保持其在原始可见facet中的顺序。Newfacet(根据原始船体实现)创建的结果:
point_set horizon_(horizon_facet_.vertices_.cbegin(),
horizon_facet_.vertices_.cend()); // n * log(n) +
auto const hend = horizon_.end();
point_list ridge_;
for (size_type const p : vertices_) { // n *
auto const h = horizon_.find(p); // (log(n) +
if (h == hend) {
ridge_.push_back(apex);
} else {
ridge_.push_back(p);
horizon_.erase(h); // const)
}
}
- 使用Unreal C++获取VR耳机的世界位置/方向
- 在C++中向零方向近似的最佳方法
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- OpenVR:向视图方向移动
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 带有枚举方向/类型的气泡排序结构数组
- OpenGL通常"Up"方向?
- 定义/预设NURBS起点和终点的方向
- 如何按另一个向量的方向调整一个向量?
- 粒子系统:所有粒子都朝同一方向运动
- C++指标评价方向
- SFML - 弹丸以不同的方向减速
- C++位移位在相反方向上具有相同的常量,结果不同,代码更改很小
- 如何在相对于观看方向的地形中移动
- RCPP 函数,用于在 4 个方向上生成随机游走
- "in"和"out"在参数方向上是什么意思?
- 使用libgpiod,如何动态切换请求行的方向
- OpenGL:在那个方向上旋转和移动
- Lambda 函数在特征中按元素方向
- 给定方向和位置如何使用 GLM 计算旋转矩阵