我遇到了这个小问题,而我解决这个问题的算法并不适用于所有情况.有人知道如何解决这个问题吗?
这是一个示例多边形:
例如http://img148.imageshack.us/img148/8804/poly.png
正式说明
我们有一个CW顺序列表,用于定义多边形.我们还可以查询一个点是否是一个切割点is_cut(p),在哪里p是一个给定的点.现在我们要计算由此"切割"引起的新多边形.
算法应该这样做:
输入: {a, c1, b, c4, c, c5, d, c6, e, c3, f, c2}
输出:{a, c1, c2},{b, c4, c3, f, c2, c1},{d, c6, c5},{e, c3, c4, c, c5, c6}
这是我目前的算法:
follow your points, CW
if the point is a cut point
-> go back trough the list looking for cut points
--- if next cut point is connected to the current cut point
and …Run Code Online (Sandbox Code Playgroud) 我有一个点的集合描述了应该是大致球形的形状的表面,我需要一种方法来确定是否有任何其他给定点位于这个形状内.我以前将形状近似为一个精确的球体,但事实证明这太不准确了,我需要一种更精确的方法.简单和速度有利于完全准确,良好的近似就足够了.
我遇到了将点云转换为3d网格的技术,但我发现的大多数事情都非常复杂,我正在寻找尽可能简单的东西.
有任何想法吗?
我有2D闭合矢量路径,在SVG路径类语法中指定- 即这些路径包括直线和各种贝塞尔曲线.有没有什么像一个小的,漂亮的和离散的库(最好用C,Java或Ruby,但如果这个库干净且易于使用,任何语言都可以),它允许做这些路径的联合,交叉和减法等布尔运算?
到目前为止我发现的内容包括:
所以,问题是,是否有任何其他小巧,易用的库可以在类似SVG的路径上处理布尔运算?
我需要在平面中的一般位置生成n个随机点,即没有三个点可以位于同一条线上.点的坐标应为整数,并且位于固定的平方m x m内.什么是解决这个问题的最佳算法?
更新:方形与轴对齐.
我需要在凹面(非凸面)内部多边形周围生成Voronoi图.我在网上寻找方法,但我无法弄清楚如何做到这一点.基本上,我生成点的凸包,计算双点并在这些点之间建立边缘网络.但是,当遇到内部多边形的边缘时,它必须看起来像形状的边缘,就像凸包一样.因此,通过这样做并剪切边界处的所有边缘,我应该得到一个Voronoi图,它具有内部多边形边界的良好边缘,并且没有位于内部多边形两侧的单元格.
让我给你举个例子:

这个问题是单元格穿过内部多边形边缘,并且单元格结构和多边形形状之间没有视觉关系.
有人知道如何解决这个问题吗?是否有一些算法已经做到这一点或接近我正在努力实现的目标?
非常感谢你的任何输入!
假设我有一组巨大的非重叠矩形和整数坐标,它们一劳永逸地固定
我有另一个矩形A,其整数坐标的坐标正在移动(但你可以假设它的大小是常数)
查找哪些矩形与A交叉(或内部)的最有效方法是什么?我不能简单地遍历我的设置,因为它太大了.谢谢
编辑:矩形都与轴平行
我正在考虑为我的Computational Geometry类(2D)编写几个例子,我想使用html5和javascript.
任何人都可以推荐一个JavaScript库或html5有我需要启动的一切吗?
我将主要使用点和线,但是有一些东西可以绘制笛卡尔平面作为参考,也许可以使用一些数据结构.
javascript html5 geometry computational-geometry html5-canvas
起初,我认为这个问题等同于确定多边形是否是凸面,但似乎仍然可以通过一个三角形扇形绘制非凸多边形. 考虑这个形状,一个非凸多边形.可以很容易地想象一些中心点区域允许用三角形扇形绘制这个多边形(尽管会有其他中心点不会).给定一个固定的中心点,我希望能够确定定义多边形的2d点的集合是否允许使用单个三角形扇形绘制它.
看起来关键是要确保从中心点到任何顶点绘制的线条没有"妨碍",这意味着顶点的其他边缘线.但是,重要的是尽可能使计算成本低廉,并且我不确定这样做是否有一个很好的数学捷径.
最终,我将要让多边形的顶点移动,并且我需要确定允许顶点移动的"边界",因为其余的是固定的(并且可能稍后甚至允许直接同时反应移动)还有2个邻居),以保持多边形能够在单个三角形扇形中绘制.但这就是未来,希望对整个多边形的测试可以分解为一个计算子集,以假设已经凸出的多边形来测试单个顶点运动的边界.
给定两条共线线段AB和CD,如何找到它们是否重叠?如何找到重叠的起点和终点?
以下是我正在使用的方法.我首先确保A <B和C <D.
if(pa < pc){
if(pc < pb){
if(pd < pb){
// overlap exists; CD falls entirely within AB
}
else {
// overlap exists; CB is the overlapping segment
}
}
else {
// no overlap exists; AB lies before CD
}
}
else {
if(pa < pd){
if(pb < pd){
// overlap exists; AB lies entirely within CD
}
else {
// overlap exists; AD is the overlapping segment
}
}
else {
// no overlap …Run Code Online (Sandbox Code Playgroud) algorithm geometry coordinates line-segment computational-geometry
我的妻子给了我这个任务,所以这是头等大事:-)
我有一系列积分(实际上是Northings和Eastings,但这并不重要).我想取这些点并创建一组代表轮廓的矢量,这样我就可以在Google地球上绘图.
所以,像:
# #
# # #
# # #
# #
#
Run Code Online (Sandbox Code Playgroud)
会给:
#-----------------------#--
/ \ --#
# #------------/
\-----# /
\ /
#
Run Code Online (Sandbox Code Playgroud)
我想出的一个可能的解决方案是计算每个点之间的向量,并丢弃与另一个向量重叠的每个向量.我还没有实现这个(不太确定如何),但我想知道是否还有其他方法.
该算法只需要运行几次,所以如果每次运行需要一个小时,那么RAM就不是问题.
algorithm ×6
geometry ×4
c ×2
c++ ×2
java ×2
polygon ×2
coordinates ×1
html5 ×1
html5-canvas ×1
intersection ×1
javascript ×1
line-segment ×1
math ×1
processing ×1
random ×1
ruby ×1
svg ×1
voronoi ×1