许多策略游戏使用六边形瓷砖.其中一个主要优点是任何瓷砖的中心与其所有相邻瓷砖之间的距离是相同的.
我想知道是否有人对将六角形瓷砖系统与传统地理系统(经度/纬度)结合起来有任何想法.我认为用六边形瓷砖覆盖地球并能够将地理坐标映射到瓷砖会很有趣.
以前有人见过远近的东西吗?
UPDATE
我正在寻找一种细分球体表面的方法,以便每个分区具有相同的表面积.理想情况下,相邻子分区的中心将是等距的.
我正在寻找一种打包算法,它将不规则多边形缩小为矩形和直角三角形.该算法应该尝试使用尽可能少的这种形状,并且应该相对容易实现(考虑到挑战的难度).在可能的情况下,它还应该优先考虑三角形的矩形
如果可能,这个问题的答案应该解释建议算法中使用的一般启发式方法.
对于小于100个顶点的不规则多边形,这应该在确定的时间内运行.
目标是为外行人产生不规则多边形的"合理"分解.
应用于解决方案的第一个启发式算法将确定多边形是规则的还是不规则的.在正多边形的情况下,我们将使用我的类似文章中关于常规多边形的方法:正则多边形的有效填充算法
alt text http://img401.imageshack.us/img401/6551/samplebj.jpg
我有(x,y,z)形式的数据,其中x和y不在常规网格上.我希望显示这些数据的2D色彩图,其中强度(例如,灰度)映射到z变量.一个明显的解决方案是在常规网格上插值(见下文),
d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2
library(akima)
d2 <- with(d, interp(x, y, z, xo=seq(0, 30, length = 30),
yo=seq(0, 30, length = 50), duplicate="mean"))
pal1 <- grey(seq(0,1,leng=500))
with(d2, image(sort(x), sort(y), z, useRaster=TRUE, col = pal1))
points(d$x, d$y, col="white", bg=grey(d$z/max(d$z)), pch=21, cex=1,lwd=0.1)
Run Code Online (Sandbox Code Playgroud)
然而,这会丢失初始网格的信息(点与实际数据的位置),这些信息在某些位置可能非常精细或非常粗糙.我倾向于使用三角形进行delaunay平铺,这准确地表示原始数据点的实际位置和密度.
理想情况下,解决方案会
计算镶嵌绘图功能的外部,使得所得到的多边形可以与任一被绘制ggplot2,lattice或碱图形
快点 在我的实际例子中(~1e5分),tesselation via的计算deldir可能非常慢.
通过"tesselation"我的意思是Delaunay三角形或Voronoi图,虽然我的偏好是前者.然而,它带来了基于原始数据点插入每个三角形的颜色的额外复杂性.
我有一些凸多边形存储为STL矢量点(或多或少).我想快速镶嵌它们,最好是尺寸相当均匀的碎片,没有"条子".
我打算用它把一些物品分成小块.有没有人知道一个漂亮的图表来镶嵌多边形(将它们分成一个较小的凸多边形或三角形的网格)?
我已经看过一些我已经在网上找到的,但我甚至无法让它们编译.这些学术类型并不重视易用性.
我出于好奇而问这个问题,在出于性能原因使用GLU之前首先尝试实现这样的算法.
我已经研究过常见的算法(Delaunay,经常会提到Ear Clipping),但我似乎无法理解GLU如何一直这么做.
你们有没有关于这个主题的有趣论文或文章?
我需要使用近似均匀的三角形平铺来填充任意多边形.我该怎么做?您可以提供对现有算法的引用,甚至可以提供您自己的想法或提示.
推测如下:
这不是一个容易解决的问题,我希望"启发式"解决方案可能是最有效的......(对吧?)
我正在寻找一种打包算法,它将正多边形缩小为矩形和直角三角形.该算法应该尝试使用尽可能少的这种形状,并且应该相对容易实现(考虑到挑战的难度).
如果可能,这个问题的答案应该解释建议算法中使用的一般启发式方法.
我想在WPF中无缝平铺一堆不同颜色的矩形.也就是说,我希望将一堆矩形边对边放置,并且它们之间没有间隙.
如果所有内容都与像素对齐,这可以正常工作.但我也想支持任意缩放,理想情况下,我不想使用SnapsToDevicePixels(因为当图像缩小时会影响质量).但这意味着我的矩形有时会带有间隙.例如:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Black">
<Canvas SnapsToDevicePixels="False">
<Canvas.RenderTransform>
<ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
</Canvas.RenderTransform>
<Rectangle Canvas.Left="25" Width="100" Height="100" Fill="#CFC"/>
<Rectangle Canvas.Left="125" Width="100" Height="100" Fill="#CCF"/>
</Canvas>
</Page>
Run Code Online (Sandbox Code Playgroud)
如果ScaleTransform的ScaleX为1,则矩形无缝地组合在一起.当它为0.5时,它们之间会出现深灰色条纹.我理解为什么 - 组合的半透明边缘像素不能组合成100%不透明.但我想要一种解决方法.
我总是可以让矩形重叠,但我不会总是事先知道它们将成为什么模式(这是一个最终将支持地图编辑器的游戏).此外,这会导致当周围的事情缩放的方式重叠区域的文物中(除非我做下叠部分,这是一个可怕的很多工作,而且还导致在角落的问题斜面切割的角度).
有没有什么方法可以将这些矩形组合成一个组合的"形状",在没有内部间隙的情况下渲染?我已经玩过GeometryDrawing,它正是这样做的,但后来我没有看到用不同颜色的画笔绘制每个RectangleGeometry的方法.
有没有其他方法可以在任意变换下无缝拼接形状,而不需要使用SnapsToDevicePixels?
我想生成一些方形图,里面有六边形数组,就像这里绘制的一样。我想绘制常规(几何规则)和异常六边形镶嵌,所以我认为“sp”包中的工具不起作用。
下面是我使用 owin 和 plot 进行正六边形镶嵌的尝试。
library(maptools)
library(spatstat)
twid <- 20
theight <- 20
sideL <- 2
rp1 <- (sideL/2)*sqrt(3)
rp2 <- 2*(sideL/2)*sqrt(3)
rp3 <- 3*sideL
bx <- c(1:floor(twid/rp3))
by <- c(1:floor(theight/rp3))
hex_array1 <- list(bx)
hex_array2 <- list(by)
for(i in 1:ceiling(twid/rp3)){
bx[i] <- list(x=c(0+rp3*i,1+rp3*i,3+rp3*i,4+rp3*i,3+rp3*i,1+rp3*i))
by[i] <- list(y=c(rp1,rp2,rp2,rp1,0,0))
hex_array1[i] <- bx[i]
hex_array2[i] <- by[i]
}
har1 <- list(x=c(0,1,3,4,3,1), y=c(rp1,rp2,rp2,rp1,0,0))
har2 <- list(x=hex_array1,y=hex_array2)
hexig <- owin(poly=list(list(x=c(0,twid,twid,0), y=c(0,0,theight,theight)),
har1, har2
)
)
plot(hexig)
Run Code Online (Sandbox Code Playgroud)
但是,由于 har2 未正确格式化为列表列表,因此上述内容似乎出错了。
以上显然仅适用于单行六边形,但我想一旦获得第一行,我只需将单行包装在 for 循环中,为每行添加一组 x 和 …
我正在使用一种算法,对于每次迭代,需要找到一组生态协调所属的Voronoi图的哪个区域.也就是说,每个坐标位于哪个区域内.(我们可以假设所有坐标都属于一个区域,如果这有任何区别的话.)
我还没有任何适用于Python的代码,但伪代码看起来像这样:
## we are in two dimensions and we have 0<x<1, 0<y<1.
for i in xrange(1000):
XY = get_random_points_in_domain()
XY_candidates = get_random_points_in_domain()
vor = Voronoi(XY) # for instance scipy.spatial.Voronoi
regions = get_regions_of_candidates(vor,XY_candidates) # this is the function i need
## use regions for something
Run Code Online (Sandbox Code Playgroud)
我知道scipy.Delaunay有一个名为find_simplex的函数,它会在Delaunay三角剖分中完成我想要的简单操作,但是我需要Voronoi图,并且我希望避免构建它们.
问题:
1.是否有某种类型的库可以让我轻松完成这项工作?
2.如果没有,是否有一个好的算法可以让我有效地做到这一点?
更新
Jamie的解决方案正是我想要的.我有点尴尬,虽然我自己也没想过......