问题标签 [spherical-coordinate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python(最小)点集之间的大圆距离
a
是否有一个 Python 包可以有效地计算数组中每个(纬度,经度)点到数组中每个(纬度,经度)点的最小大圆距离b
?例如scipy.spatial.distance.cdist不幸的是,据我所知,它不支持球面距离。
对于许多数据点(例如a
和分别有 ~70000 和 ~1200 点),如果需要使用不同的和数组b
重复迭代,类似于以下示例的手动计算会变得太慢。a
b
algorithm - 从三角形带转换为多边形
我有一些区域包含 1 个或多个多边形。每个多边形以 GL_TRIANGLE_STRIP 格式表示,其中每个顶点是一对 (lat, long)。有什么办法可以得到该区域的轮廓?
一些规格:
- 轮廓必须按逆时针顺序排列。
- 任何 2 个多边形都可以有一个公共边。
- 多边形可以是凹的
- 一个多边形内部最多可以有 1 个“间隙”,它将由另一个轮廓按顺时针顺序表示。
我正在寻找一种复杂度约为 O(N*logN) 的算法,其中 N = 顶点数。
编辑:我尝试了像 2 x 2 这样的解决方案,直到我到达数据集的末尾然后向后移动,但是这个算法在有间隙的多边形上效果不好,例如
这个多边形,输入是: A B C D E F G H I J
,其中 I = A 和 J = B , 这样做, 输出将是A C E G I J H F D B
and that should be A C E G
and B H F G
(顺序是倒置的,因为这样更容易绘制)。
另一种解决方案是考虑点一个无向图和它们之间的边(根据 GL_TRIANGLE_STRIP 格式),我在其中应用了 DFS 以取出连接的组件。之后,我计算了每个组件的面积,我将最大面积多边形视为逆时针轮廓,其余为顺时针轮廓。这不起作用,因为邻接表需要一些排序,这会使算法效率低下。
我尝试的另一个解决方案是一些调整过的凸包,但凸包仍然是凸包,并且不适用于凹多边形。
我还阅读了有关凹壳的信息,但这似乎并不总是给出准确的结果。
谢谢您的回答!
r - 3D 球形极坐标图,第 4 维映射到另一个变量
首先,我在这类主题上找到了一些线程,但似乎没有一个完全符合我的要求,或者至少我在尝试解决它时真的放屁了,所以我感谢其他人的意见。
我有 4 个变量组成一个极坐标图,R、theta、phi 和 A,其中 A 代表测量值。
在 2d 的极坐标轴上绘制此类数据(对于给定的 phi)并具有由半径表示的值 A 很容易,例如使用 plotly:
这使:
然而,这种测量本质上是球坐标网格上设定半径处的反射强度,用这种方式表示它真的很好。换句话说,让我的球体具有固定半径和每个坐标的 A 值,并用与 A 值对应的颜色绘制球体表面。我最接近的是这个,使用 plot3D 包中的'scatter3d':
现在这是正确的方向,但我希望能够:A)将其作为彩色表面而不是一系列点,B)能够像使用 rgl 包一样旋转它等等,c)有一个标记的极轴而不是笛卡尔盒子,尽管我认为这个完全超出了范围。
我没有成功尝试过的其他包,往往需要将极坐标转换为规则间隔的笛卡尔坐标矩阵,然后并不总是允许你映射颜色(或者至少我不知道如何得到A 到 x、y 和 z 矩阵的映射)。
有没有人有更好的想法?
谢谢。
c# - 使用量子位进行球坐标旋转
我一直在尝试使用量子物理学来旋转球坐标。我按照以下帖子介绍了如何执行此操作: https ://stla.github.io/stlapblog/posts/RotationSphericalCoordinates.html
我对量子物理学有一些了解,但非常有限。这是我在 C# 中提出的(抱歉缩进):
我得到的结果(如下)没有任何意义。我愿意提供任何帮助!或实现此目的的替代方法。
样本输入的结果(在 Y 上旋转角度 = 30):
从 C 开始:232.5 G:124----------------
theta 2.16420827247297 phi:4.05789051088682 旋转
的Theta 为:1.00298077136411 旋转的Phi 为:3.60482234077516
度数:
theta 124 phi:232.5
旋转的Theta是:57.466565131939,旋转后的Phi是:206.541106020887
以C结尾:232.5 G:124----------------
以C开头:232.5 G:126--------- -------
theta 2.19911485751286 phi: 4.05789051088682
the rotatedTheta is: 1.01877652772437 and the rotatedPhi is: 3.58185846568257
in degrees:
theta 126 phi: 232.5
the rotatedTheta is: 58.3715953055989 and the rotatedPhi is: 205.225372896816
ending with C: 232.5 G: 126 ----------------
从 C 开始:232.5 G:128----------------
theta 2.23402144255274 phi:4.05789051088682 旋转
的Theta 为:1.03535071902231 旋转的Phi 为:3.55952053311715
度数:
theta 128 phi:232.5
旋转的Theta是:59.3212265158133,旋转后的Phi是:203.94550363777
以C结尾:232.5 G:128----------------
以C开头:232.5 G:130--------- -------
theta 2.26892802759263 phi: 4.05789051088682
the rotatedTheta is: 1.05269513187015 and the rotatedPhi is: 3.53779163501912
in degrees:
theta 130 phi: 232.5
the rotatedTheta is: 60.3149881701271 and the rotatedPhi is: 202.700529483282
ending with C: 232.5 G: 130 ----------------
django - 按与坐标的距离过滤(Django over MariaDB)?
我的数据库中有一组带有纬度和经度坐标的记录。是否有一种直接的方法来过滤给定对象的某个指定半径内的其他对象?
用于方法place.get_nearby(rad_km=1.3) -> "QuerySet[Place]"
或函数find_nearby(place: Place, rad_km: float) -> "QuerySet[Place]"
就可以了。
如果有大量涉及的解决方案(需要大量新库和重构),我将声明它超出范围。我目前在我的地方有一种方法来计算它们之间的距离(以弧度和公里为单位),但无法过滤附近的地方。
最后的用例是生成信息表,如下所示:
此外,确定将对象放入哪个方格的最佳方法是arctan((lat2-lat1)/(lon2-lon1))
(假设它们相当接近)?
math - 从球体周围的矢量场投影 3D 速度值以创建流线
我只是无法弄清楚如何使一个具有给定速度的点在我的可视化中在笛卡尔空间中移动,同时保持在一个球体(行星)周围。
输入:
许多要点:
- XYZ 中的 Vector3 位置(使用下面的球面函数转换的纬度/经度坐标)。
- Vector3 速度(例如,向东 1.0 m/s,向北变化 0.0 m/s,向北变化 2.0 m/s)。请注意,这些不是度数,只是米/秒,类似于我的世界空间单位。
只需将速度添加到点位置将使点在球体上飞行,这是有道理的。因此,需要转换速度,以便保持在球体周围。
目标:目标是围绕球体创建一些流线,例如:
全球矢量的示例图像
所以,我一直在尝试改变基本思想:以法线到我的球体中心,得到一个垂直向量并再次乘以得到一个切线:
然而,这只适用于数据的一部分,看起来它只适用于西半球的一半(比如美国)。为了让它(部分)在东南部地区(比如南非)工作,我不得不切换 U 和 V 组件。
球体的 XYZ 坐标是使用球坐标创建的:
当然,我也尝试了各种变体,将不同的“上/右”向量相乘,例如 float3(0,1,0) 或 float3(0,0,1),切换 U/V/W 分量等将速度转换为运行良好的东西。但是在大约 30 小时没有任何进展之后,我希望有人可以帮助我并为我指明正确的方向。问题基本上是只有球体的一部分是正确的。
考虑到一部分数据可视化还不错,我觉得应该可以通过交叉点积来实现。由于性能在这里非常重要,因此我试图远离“昂贵的”三角运算 -如果可能的话。
我尝试过切换速度分量,在所有情况下,一个区域/半球都可以正常工作,而其他区域/半球则不行。例如,切换 U 和 V(暂时忽略 W)使非洲和美国都能正常工作。但从美国中途开始,事情又出问题了。
为了更好地说明这个问题,用几张图片。大紫色图像是使用 QGIS3 生成的,并显示了它应该是怎样的:
不幸的是,我有一个新的 SO 帐户,还不能发布图片。因此,一个链接,对不起。
真的希望有人能对这个问题有所了解。我需要一个旋转矩阵来旋转速度矢量吗?或者乘以(正确的)法线/切线就足够了?在我看来,除了这些奇怪的怪事之外,我觉得我忽略了一些微不足道的事情。
然而,数学真的不是我的事,破译公式对我来说是一个很大的挑战。所以请耐心等待并尽量保持语言相对简单(向量函数名称对我来说比科学数学符号容易得多)。能走到这一步,对我自己来说已经是一个了不起的成就。
我试图尽可能清楚,但如果事情不清楚,我很乐意更详细地阐述它们。
python - 在 SymPy 中有没有一种在球坐标中工作的方法?
我正在编写一个脚本以在 Python 中进行分析计算。为此,我需要参数的向量表示以及一些基本的向量操作,例如梯度和发散,因此我开始使用 SymPy。但是,我注意到在球坐标中没有一种直接的工作方式。
阅读文档后,我发现笛卡尔环境可以简单地定义为
并直接开始使用酉笛卡尔酉向量 i, j, k
有什么方法可以为球坐标初始化这样的环境,我可以访问径向、theta 和 phi 酉矢量,因此基本矢量操作会相应地完成?非常感谢您!
c++11 - 在opengl中使用球坐标
我正在尝试使用球坐标围绕中心点绘制点。我知道这不是在 OpenGL 中绘制球体的最有效方法,但我想把它作为一种更好地理解球坐标的方法。
我想以某个角度通过每个点,因此我有一个嵌套的 for 循环遍历 theta 0-360 和 phi 0-360,我试图获取每个步骤的笛卡尔坐标并将其显示为单点。
到目前为止,我有这个:
我存储这些点并显示它们。显示功能工作正常,因为我以前用它来显示其他点结构,但由于某种原因我无法让它工作。
我还尝试将角度从度数转换为弧度:
assin()
和cos()
两者都使用弧度,但它产生相同的结果。
我做错了什么并且严重误解了某事吗?