Tag: 计算几何

凸壳中最大的三角形

问题已经得到解答,但我面临的主要问题是理解其中一个答案。 来自https://stackoverflow.com/a/1621913/2673063 以下算法O(n)如何? 它表示如果需要,首先对点进行排序/计算凸包(在O(n log n)时间内),我们可以假设我们有凸多边形/船体,其点按照它们在多边形中出现的顺序循环排序。 调用点1,2,3,…,n。 令(变量)点A,B和C分别从1,2和3开始(以循环次序)。 我们将移动A,B,C直到ABC是最大面积三角形。 (这个想法类似于旋转卡尺方法,在计算直径(最远的一对)时使用。) 在A和B固定的情况下,前进C(例如,最初,A = 1,B = 2,C前进到C = 3,C = 4,…),只要三角形的面积增加,即,只要面积(A,B,C)≤面积(A,B,C + 1)。 这个点C将是那些固定A和B最大化区域(ABC)的点。(换句话说,函数Area(ABC)是C的函数的单峰)。) 接下来,如果增加面积,则前进B(不改变A和C)。 如果是这样,再次按上述方式推进C. 然后如果可能的话再次前进B等。这将给出最大区域三角形,其中A作为顶点之一。 (到这里的部分应该很容易certificate,并且简单地为每个A单独执行此操作将给出O(n2)。但请继续阅读。)现在再次推进A,如果它改善了面积等,虽然这有三个“嵌套的“循环,请注意B和C总是前进”,并且它们总共最多前进2n次(类似A最多前进n次),因此整个过程在O(n)时间内运行。

如何找出一个点是否在一组区间内?

我正在寻找最快的方法来决定一条线上的一个点是否在该线的子集内。 给我一个整数Point,我也有一个“列表”: 点,由整数(3,10,1000等)表示 间隔,我用2个整数代表(2:10是从2到10的所有整数,50:60等) 在这个例子中,如果我的点的值是5,那么我返回true,因为它包含在一个区间中,相同的是55.如果我的点等于1000,我也返回true,因为它匹配点列表。 我正在寻找一种快速的方法(比线性更快)来检查这种情况,而不必像可能的点那样实现尽可能多的整数(即,对于1:1000的间隔,我不想实现1000个整数)。 这可以在对数时间内完成吗? 谢谢 编辑:你可以认为任何时候预处理数据列表等于0,因为一旦我的初始间隔被处理,我需要将这个测试应用到10k点

n阶Bezier曲线?

我已经设法实现了二次和三次贝塞尔曲线。因为我们有一个公式,所以非常简单。 现在我想用泛化表示一个n阶贝塞尔曲线: 哪里 和 我正在使用位图库来渲染输出,所以这是我的代码: // binomialCoef(n, k) = (factorial(n) / (factorial(k) * factorial(n- k))) unsigned int binomialCoef(unsigned int n, const unsigned int k) { unsigned int r = 1; if(k > n) return 0; for(unsigned int d = 1; d <= k; d++) { r *= n–; r /= d; } return r; } […]

使用C / C ++的球体上的点,线和多边形

我的应用是表示地球上的形状(使用球体就足够了)表面。 那些可以是点,线和多边形。 应使用度数或弧度(就像地理坐标一样)来定义坐标。 球体表面上两点之间的线段应位于其大圆上 。 多边形应包含这些线的集合。 此外,我想执行Set – Basic操作,如交集,联合,差异,补充所提到的形状。 这些操作只需要输出点集合。 我试图通过在球体上嵌入的Nef多边形上使用CGAL的3D球面几何内核和2D布尔运算来解决这个问题 。 实际上,我已经遇到了在球体上划线的问题。 此外,CGAL在欧几里德空间中工作,它仍然需要几何操作,以便与放置在球体上的大圆一起工作。 我的问题是,如果你可以帮助我实现CGAL中提到的function,或者你可以推荐另一个C / C ++库来实现这一点。 非常感谢你!

如何测试点是否位于由点云定义的表面的3d形状内?

我有一个点的集合描述了应该是大致球形的形状的表面,我需要一种方法来确定是否有任何其他给定点位于这个形状内。 我之前已经将形状近似为一个精确的球体,但事实certificate这太不准确了,我需要一种更精确的方法。 简单和速度有利于完全准确,良好的近似就足够了。 我遇到过将点云转换为3d网格的技术,但我发现的大多数事情都非常复杂,我正在寻找尽可能简单的东西。 有任何想法吗?

如何确定一个点是否位于矩形内?

可能重复: 找到一个点是否位于矩形内部 有一个采访问题,“如何确定一个点是否位于矩形内” 请注意,矩形也可以旋转。 因此,在矩形内检查点的简单解决方案在这里不起作用…… 请分享您对这个问题的看法.. 我在互联网上找到了一个链接,并试图了解它,但失败了……请问这里有什么身体可以提供完整的计算机图形逻辑解决方案,因为我已经忘记了所有的基础知识…. 如何确定一个点是否在矩形内。

如何检查点(x,y)是否在笛卡尔坐标系中的多边形内?

这个问题在这里已有答案: 指向Polygon aka命中测试 C#指向多边形 给定在笛卡尔坐标系中用N线方程组成的随机多边形,是否有任何标准公式用于检查点(x,y)的隶属度? 简单的解决方案是获取所有线公式,并检查点X是否在该线下方,在该线上方以及在另一条线的右侧,等等。但这可能是单调乏味的。 我应该注意,多边形可以是任何形状,具有任意数量的边,并且可以是凹的或凸的。 为方便起见,我已经添加了这些实用function: float slope(CGPoint p1, CGPoint p2) { return (p2.y – p1.y) / (p2.x – p1.x); } CGPoint pointOnLineWithY(CGPoint p, float m, float y) { float x = (y – py)/m + px; return CGPointMake(x,y); } CGPoint pointOnLineWithX(CGPoint p, float m, float x) { float y = m*(x – […]