我一直在开发一个小项目(在过去的3个小时),我正在做的C#,以帮助我选择一个家。
具体来说,我把犯罪统计数据放在谷歌地图上,以找到一个很好的社区。
下面是一个例子:http://otac0n.com/Demos/prospects.html
现在,我手动找到了Lat和Lng,以匹配地图的角落在这个例子中,但我有更多的地图要覆盖。
我的新应用程序允许我选择一个地标,并指向图像,将像素绑定到LatLng。类似于:
locations.Add(new LocationPoint(37.6790f, -97.3125f, "Kellogg and I-135"));
// and later...
targetPoint.Pixel = FindPixel(mouseEvent.Location);因此,我收集了一个像素/最近组合的列表,现在我想要转换图像(使用仿射或非仿射转换)。
这里的目标是让每条街都排好队。如果有一张好的地图,唯一必要的转换就是将地图从北向南排列(现在我会对此感到满意)。但我不知道从哪里开始。
有人有在C#中进行图像转换的经验吗?我如何找到适当的旋转以使地图水平?
在解决了精心制作的地图问题后,我最终希望能够覆盖手工绘制的地图。这显然会导致最终图像的严重失真,并且可能超出了第一次迭代的范围。但是,我不想开发一个将来无法扩展到这个系统的系统。
发布于 2009-06-09 15:33:15
我不知道你到底想完成什么,但如果你想在一张地图上把三个以上的点与另一个地图上的三个以上的点相匹配,基本上有两种方法可以实现:
发布于 2009-06-08 13:54:02
在二维空间中,仿射变换可由三组非线性二维点组成。在C#中,您可以使用以下例程来计算适当的矩阵:
public static Matrix fit(PointF[] src, PointF[] dst) {
Matrix m1 = new Matrix(new RectangleF(0, 0, 1, 1), src);
m1.Invert();
Matrix m2 = new Matrix(new RectangleF(0, 0, 1, 1), dst);
m2.Multiply(m1);
return m2;
}它适用于具有3个元素的两个数组参数。
如果只需要旋转和平移,则可以使用以下例程:
public static Matrix fitOrt(PointF src1, PointF src2, PointF dst1, PointF dst2) {
return fit(new PointF[] { src1, src2, ort(src1, src2) },
new PointF[] { dst1, dst2, ort(dst1, dst2) });
}
public static PointF ort(PointF p, PointF q) {
return new PointF(p.X + q.Y - p.Y, p.Y - q.X + p.X);
}如果您想找到两组多点之间的最佳逼近,那么您可以从这个http://elonen.iki.fi/code/misc-notes/affine-fit/开始
发布于 2009-06-09 19:55:35
漂亮的。
所以,多亏了杰米的指导,我找到了这个:
Delaunay三角剖分在.NET 2.0中的应用
http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/morten.html
在这一点上,这几乎被简化为lerping。
https://stackoverflow.com/questions/963533
复制相似问题