我使用Google Maps API创建了一张地图,突出了所有明尼苏达州的县.基本上,我使用一组经度/纬度坐标创建了县多边形.这是生成的地图的屏幕截图: -

用户要求之一是能够将类似的地图作为图像,以便它们可以将其嵌入到PowerPoint /主题幻灯片中.我找不到任何有用的Google Maps API,它允许我按原样保存我的自定义地图(如果你知道一种方式,请告诉我),所以我想我应该用Java中的Graphics2D绘制它.
在阅读了将经度/纬度转换为X/Y坐标的公式后,我最终得到以下代码: -
private static final int EARTH_RADIUS = 6371;
private static final double FOCAL_LENGTH = 500;
...
BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
for (Coordinate coordinate : coordinates) {
double latitude = Double.valueOf(coordinate.getLatitude());
double longitude = Double.valueOf(coordinate.getLongitude());
latitude = latitude * Math.PI / 180;
longitude = longitude * Math.PI / 180;
double x = EARTH_RADIUS * Math.sin(latitude) * Math.cos(longitude);
double y = EARTH_RADIUS * Math.sin(latitude) * Math.sin(longitude); …Run Code Online (Sandbox Code Playgroud) java google-maps latitude-longitude cartesian coordinate-transformation
我有几个形式的笛卡尔点:(x,y)
其中x和y都是非负整数.
例如
(0,0),(1,1),(0,1)
我需要一种算法来安排上述点
,以便从一个点到另一个点将
x或y改变1.
换句话说,我想避免
对角线移动.
因此,上述点将被安排为:
(0,0),(0,1),(1,1).
类似地,对于(0,0),(1,1),(0,2)
,不存在这样的布置.
我不知道该怎么称呼,
但我称之为曼哈顿订购.
有人可以帮忙吗?
给定一组大的(数万到数百万)无序点表示为3D笛卡尔向量,用于制作包含所有点的常规方形网格(用户定义的间距)的好算法是什么?一些限制:
为了说明2D,给出了这一点:
对于某些网格间距X,算法的一个可能的返回值将是这些红点的坐标(虚线仅用于说明目的):
对于网格间距X/2,算法的一个可能的返回值是这些红点的坐标(虚线仅用于说明目的):
对于任何感兴趣的人来说,我正在使用的无序点是大蛋白分子的原子坐标,就像你可以从.pdb文件中得到的那样.
Python是解决方案的首选,尽管伪代码也很好.
编辑:我认为我对我所需要的第一次描述可能有点模糊,所以我添加了一些约束和图像以澄清事情.
看一下这里的例子:http://www.brianhare.com/physics/so.html
看看我在使用这两个主要功能的console.log:
function distanceBetween2pts(x1, y1, x2, y2) {
console.log("Particle: ("+x1+","+y1+") Mouse: ("+x2+","+y2+")");
// Pythagoras Theorem
// PQ = sqrt( (x2-x1)^2 + (y2-y1)^2 )
var x = (x2-x1);
var y = (y2-y1);
this.radius = Math.sqrt(x*x + y*y);
this.x = x;
this.y = y;
}
function polar2cartesian(R, theta) {
this.x = R * Math.cos(theta);
this.y= R * Math.sin(theta);
}
Run Code Online (Sandbox Code Playgroud)
当鼠标位于粒子的上方和右侧(中心圆)时,例如:

控制台日志显示:
Particle: (300,250) Mouse: (326,223)
artan(-27 / 26) = angle: -46.08092418666069 - theta -0.8042638494191191
Run Code Online (Sandbox Code Playgroud)
它应该是arctan(27/26)=角度:46:theta = 0.8.因为即使老鼠在中心"上方",它也会将y2-y1读为-27,因为坐标系统基于左上方的0,0.
那么问题是当X和Y都为负时使θ为正,而它应该指向相反的方向(从中心点向外).我知道我可以在这里做一个180度的技巧,但我想知道我做错了什么.
可能重复:
内部联接vs其中
今天我和我的项目经理就Cartesian产品进行了辩论.他说'自然连接'比使用'select from where'要好得多,因为后者会导致db引擎在内部执行笛卡尔积,但前者使用另一种方法来阻止这种情况.据我所知,自然连接语法在性能或含义方面与"从哪里选择"没有任何不同,我的意思是你可以根据自己的喜好使用.
SELECT * FROM table1,table2 WHERE table1.id=table2.id
SELECT * FROM table1 NATURAL JOIN table2
Run Code Online (Sandbox Code Playgroud)
请详细说明导致笛卡尔积的第一个查询,但第二个查询更加智能
我想通过椭圆函数拟合二维数组:(x / a)² + (y / b)² = 1 ----> (因此得到 a 和 b)
然后,能够在我的图表上重新绘制它。我在互联网上找到了很多例子,但没有一个有这个简单的笛卡尔方程。我可能搜索得很糟糕!我认为这个问题的基本解决方案可以帮助很多人。
下面是一个数据示例:
可悲的是,我不能把这些值......所以让我们假设我有一个 X,Y 数组来定义每个点的坐标。
将矢量(X,Y,Z)从 ENU 旋转到 NED 的统一方法,反之亦然
\n将四元数从 ENU 旋转到 NED 的统一方法,反之亦然
\n如果可以给出解决方案,我们将不胜感激python,但对我来说更多的是专业知识。
如果我在 ENU 中有这个向量
\nv_xyz_ENU = [5,2,1] \nRun Code Online (Sandbox Code Playgroud)\n翻译为
\nv_xyz_NED = [2,5,-1]\nRun Code Online (Sandbox Code Playgroud)\n\n\nENU <-> NED
\n
\nX, Y, Z <-> Y, X,-Z
如果我在包含 RPY 的向量上使用这种技术(如果这是正确的表达方式),我会感到困惑。
v_rpy_ENU = [0,0,90] \nRun Code Online (Sandbox Code Playgroud)\n翻译为
\nv_rpy_NED = [0,0,-90]\nRun Code Online (Sandbox Code Playgroud)\n当我写下计算时,我更喜欢使用以度为单位的角度
这个旋转似乎不正确,因为我知道结果应该是 0\xc2\xb0
\nENU Yaw 0\xc2\xb0 应该是 NED Yaw -90\xc2\xb0
\nENU Yaw 90\xc2\xb0 应该是 NED Yaw 0\xc2 \xb0
\nENU …
假设我有一个x包含10行和2列的矩阵.我想生成一个M包含每对唯一行x的新矩阵 - 即一个包含55行和4列的新矩阵.
例如,
x <- matrix (nrow=10, ncol=2, 1:20)
M <- data.frame(matrix(ncol=4, nrow=55))
k <- 1
for (i in 1:nrow(x))
for (j in i:nrow(x))
{
M[k,] <- unlist(cbind (x[i,], x[j,]))
k <- k + 1
}
Run Code Online (Sandbox Code Playgroud)
那么,x是:
[,1] [,2]
[1,] 1 11
[2,] 2 12
[3,] 3 13
[4,] 4 14
[5,] 5 15
[6,] 6 16
[7,] 7 17
[8,] 8 18
[9,] 9 19
[10,] 10 20
Run Code Online (Sandbox Code Playgroud)
然后M …
我有两个具有已知单位向量的笛卡尔坐标系:
系统A(x_A,y_A,z_A)
和
系统B(x_B,y_B,z_B)
两个系统共享相同的原点(0,0,0).我正在尝试计算四元数,以便系统B中的向量可以在系统A中表示.
我熟悉四元数的数学概念.我已经从这里实现了所需的数学:http://content.gpwiki.org/index.php/OpenGL%3aTutorials%3aUsing_Quaternions_to_represent_rotation
一种可能的解决方案是计算欧拉角并将其用于3个四元数.将它们相乘将导致最后一个,以便我可以转换我的向量:
v(A)= q*v(B)*q_conj
但是,这将再次纳入万向锁,这是不使用欧拉在开始角度的原因.
任何idead如何解决这个问题?