- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须找到多边形的法线,但为了做到这一点,我首先必须按逆时针方向对顶点 (x,y,z) 进行排序。假设我得到了用户输入的 n 个顶点点,我如何按逆时针方向排列顶点以将它们变成多边形?
最佳答案
您不能在不知道正常值的情况下订购您的积分,反之亦然。如果你说“从前面逆时针”那么你需要知道前面是哪一侧,因此你需要知道法线。所以你的问题没有答案,就目前而言,因为它有点循环:你没有足够的信息来确定你在寻找什么。
您需要更多信息。例如,如果此多边形是凸曲面的一部分,您可以计算该曲面的几何中心。然后在多边形上选择任意 3 个非共线点 a, b, c,计算法线 (norm((a - b) cross (c - b))) ,计算从质心到你的点之一的 vector (例如 b - 质心),然后检查法线是否与该 vector ( 的符号)面向相同(或相反,无论)方向正常点(b - 质心)),如果方向错误则将其翻转。本质上,您只需计算一个垂直单位 vector (记住,有两个),然后确保它指向对象的内部/外部。
如果您的脸是凹面的一部分,您可以通过将您的法线与相邻面的法线的点积相乘并翻转它(如果为负数)来使所有法线指向相同的大致方向。您仍然需要确定一种方法来确定脸部的哪一侧在表面的内侧还是外侧,但至少所有法线都会指向一侧。
如果您没有关于法线应朝向的大致方向的信息,则必须从其他地方获取逆时针信息。您可以对多边形中心周围的点进行排序以使它们按顺序排列,但要确定该顺序是顺时针还是逆时针需要其他信息(例如询问用户等)。
请注意,基于 atan 的 2D 解决方案隐含地依赖于一些额外的信息:依赖于法线面朝屏幕外/纸面外并朝向您,观众,以及因此,您可以围绕该法线在已知方向上进行排序。这种假设通常是在没有任何人真正谈论它的情况下做出的。然而,实际上,您需要决定哪一侧是正面和背面——对于 3D 来说并不总是那么容易(如果您正在渲染到屏幕并且设置了视点,您可以将其用作额外信息——比如法线面向相机,然后围绕法线排列)。
用另一种方式表达上述内容,一般来说,我们有 3 个未知数:
我们需要其中两个来确定第三个。
回应 Andon 在下面的评论:对于光栅化器,它定义了 #1 本身(或从配置中获取),而 #3 由 API 要求假设,因此可以推断出 #2。
在你经常看到描述的2D案例中(我上面提到的),#1被指定为要求,#2假设是“面向观察者的一面是正面”,所以#3可以是用 atan
确定并按递增/递减顺序排序。
在你原来的问题中,你知道#1(你已经定义了它),但你不知道#2(哪一边是前面?),因此你无法确定#3。您需要一些方法来确定 #2(例如,背对质心、面向观察者等等)。
关于c++ - 按逆时针方向对 3D 多边形顶点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978907/
我已经实现了 Bentley-Ottmann-algorithm检测多边形-多边形交叉点。这通常非常有效:由于多边形不自相交,因此两个多边形的线段并集中的任何线段相交表明两个多边形相交。 但是如果我看
我在 Silverlight 中有一个多边形(棋盘游戏的十六进制),例如; public class GridHex : IGridShape { ..... public IList
我创建了一个简单的 DirectX 应用程序来渲染一个顶点场。顶点呈现如下(如果从顶部查看): |\|\|\|\| |\|\|\|\| 每个三角形都是这样渲染的: 1 |\ 2 3 这应该意味着多边形
我的代码的某些部分here : var stage = new Kinetic.Stage({ container: "canvas", width: 300,
我正在尝试从 map 数据构造导航网格物体。步骤之一涉及将二进制图像(其中0表示占用空间,1表示自由空间)转换成平面直线图。 我正在尝试找到一种可靠的方法。我目前的想法是使用Canny边缘检测器,然后
我的任务是编写 MATLAB 代码来生成一个由 4 部分组成的 Logo ,如屏幕截图所示。左上角应为黑色,右下角应为白色。另一个程序应随机选择两种颜色。 我采取了以下方法: clear all cl
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
如何向 google.maps.Rectangle 和 google.maps.Polygon 添加标题? title 属性在 RectangleOptions 中不可用.我试过了,但没用(对于 go
我有一个表,用于将表上的段存储为多边形。然后我想获取所有被另一个多边形接触的线段,例如正方形或圆形。图片上:http://img.acianetmedia.com/GJ3 我将灰色小框表示为段和 bi
我正在我的网站上使用 CSS 来制作形状。它在 chrome 中运行良好,但在 mozilla、internet explorer 中打开时,它无法运行。 有人知道怎么解决吗? 这是 fiddle h
我使用 DrawingManager 在 Google map 上绘制圆形和多边形。我尝试使用下面的代码删除圆形/多边形。 selectedShape.setMap(null); 这里selected
我看到了很多如何检测碰撞的教程,但没有看到如何解决它。我正在制作一个自上而下的游戏,玩家具有圆形碰撞形状,而墙壁是各种多边形。 我正在使用 slick2d。我应该做的是,如果玩家与角落碰撞,我会按法线
我对 tkinter 比较陌生,我正在制作一个只使用正方形的游戏。我正在抄写的书只显示三角形。这是代码: # The tkinter launcher (Already complete) from
我在 OpenCV/Python 中工作,我遇到了这个问题。我已经使用 cv2.minAreaRect() 来获取围绕一组点的边界框。是否有任何其他函数/通用算法可以给我内接多边形(点集)的最大矩形?
如果给定一组线段 S ,我们能否设计一种算法来测试集合 S 中的线段是否可以形成多边形,我对它们是否相交多边形不感兴趣,我只想知道我可以测试什么标准, 任何建议 最佳答案 构建一个图形数据结构,其中节
如何从多个地理位置(经度、纬度值)创建多边形地理围栏。此外,如何在 Android 上跟踪用户进入此地理围栏区域或从该区域退出。 最佳答案 地理围栏只是一组形成多边形的纬度/经度点。获得纬度/经度点列
我想要一个 complex image like this在我的申请中。我想让用户点击复杂的多边形(在这种情况下是有边界的国家/地区)并突出显示他们点击的多边形。我有我需要用于该状态的图像。 我怎样才
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我想在 python tkinter 中移动对象,特别是多边形。问题出在 is_click 函数中。我似乎无法弄清楚如何确定我是否单击了该对象。代码还没有 100% 完成,移动仍然需要完成,但我现在需
我有一个大多边形,我想找到与该多边形相交的要素,但由于多边形太大,我遇到超时异常。 我试图研究 JTS 方法,但不知道如何使用它。 final List coordinates = List.of(n
我是一名优秀的程序员,十分优秀!