1

我正在使用 SVG 围绕一颗恒星绘制行星轨道,我需要绘制一个基于一个焦点而不是几何中心的椭圆。我在 2d 中绘制它,但位置需要考虑椭圆围绕焦点的旋转,以及对 Z 轴的倾角。

我已经有了遵循轨道路径的行星,但我似乎可以画出基本的椭圆,以便它们匹配。我有所有的轨道数据,包括所有的旋转参数、半长轴和半短轴。我知道我拥有我需要的所有数据,但我似乎无法弄清楚如何将它们组合在一起。请帮忙!

这是轨道组件的图表:http: //upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Orbit1.svg/400px-Orbit1.svg.png

示例轨道数据

name: Mercury
semi-major axis (AU): 0.387098
eccentricity: 0.205630
longitude of ascending node (deg): 48.331
inclination (deg): 7.005
argument of perihelion (deg): 29.124

我需要焦点在 0,0。通过计算半短轴( ry = 0.387098*sqrt(1 - 0.205630^2) ),我可以使椭圆成为这样的正确形状:

<ellipse cx="0" cy="0" rx="0.387098" ry="0.378826" />

我还可以通过计算中心和焦点之间的距离( cx = sqrt(0.387098^2 - 0.378826^2) )将焦点集中在 0,0,所以我有这个:

<ellipse cx="0.079597" cy="0" rx="0.387098" ry="0.378826" />

我不知道如何围绕点 0,0 旋转椭圆。我可以使用升交点的经度绕几何中心顺时针旋转,但我还需要将椭圆沿Z方向旋转并倾斜,这会影响rx和ry值。我也认为近日点的论点也可能适合这里,但我不确定在哪里。

我知道这些值小于一,但是一旦我弄清楚了这个过程,我就会使用乘数来放大所有内容。


更新:

感谢 BigBadaboom,我现在可以围绕焦点旋转椭圆。我仍然需要弄清楚如何在 3d 中旋转它。据我所知,这些是步骤:

  1. 将焦点平移到 0,0 -完成
  2. 通过近日点(29.124deg)的参数沿 z 轴(2d 旋转)旋转 -完成(感谢 BigBadaboom)
  3. 沿 y 轴旋转(3d 旋转)倾斜度(7.005 度) - ???
  4. 再次沿 z 轴旋转升交点的经度 (48.331deg) - 与步骤 2 相同的过程。

所有旋转都以 0,0 为中心。

4

3 回答 3

1

这也来得太晚了,但我刚看到你的帖子……经过几个月的努力,我自己解决了这个问题……</p>

没有直接的公式可以做到这一点。您需要在 3D 中沿三个轴旋转椭圆,这是通过使用旋转矩阵完成的。用 SVG 做这件事的捷径是……你不能!

但是,如果您使用一些天文馆软件,您会发现有些软件确实为某些物体(例如行星卫星)绘制了轨道椭圆。我问了这样一款天文馆软件的概念设计师,它是如何完成的,他告诉我,他们只是计算轨道周围的很多点,在 3D 中旋转每个点(使用矩阵),然后“连接点”。这个过程可能是处理器密集型的,并且需要“很长”的时间(在计算机方面,即使是一秒钟也很“长”!),所以我希望有一种不同的方法,就像我过去自己做过的那样。

然后,我意识到要画一个椭圆,只需要沿椭圆的五个点,所以不需要这样的一堆连接点的过程。我的方法是沿椭圆仅旋转 5 个点进行 3D 矩阵旋转。这些很容易确定:

  • 升序节点
  • 近天星
  • 降节点
  • 外星人
  • 一个随机点,最好不要太靠近上述四个中的任何一个,沿着轨道,例如在观察时选定的物体所在的位置

然后可以遵循一个简单的程序(例如,在http://astrowww.phys.uvic.ca/~tatum/celmechs/celm2.pdf第 55-59 页解释的程序)从这些点绘制椭圆的其余部分。

我没有显示结果的“实时”链接,但我正在努力!;-)

于 2020-10-26T00:00:57.700 回答
0

这可能来得太晚了,但是我自己也遇到了同样的问题,并遇到了这个问题,试图找到一些解决方案。

我不认为 SVG 支持 3D 旋转,但您可以改用CSS3 变换

是我使用 CSS 转换制作的 SVG 示例。

对于没有 CSS 浏览器前缀(-webkit、-moz 等)的更简洁的 SVG,请参见此处。在这个版本中,至少 Chrome 将无法渲染 3D 转换,并且 SVG 中的轨道可能看起来有点像第 3 步之前的版本。

您可以将 url 参数用于 SVG 文件的其他变体:

  • size : number –> SVG 的大小(以像素为单位)
  • bbox : number –> AU中边界框的大小(1-200)
  • noPrefixes –> 不要包含 CSS 浏览器前缀

例如:solar.svg?size=800&bbox=160&noPrefixes

对我来说,接下来的步骤将是根据 TLE 数据计算轨道和实际行星位置。在当前版本中,行星在其轨道上的随机位置,当然轨道也不是那么准确。

于 2014-03-20T10:12:18.983 回答
0

我不确定我是否完全理解您正在尝试做的所有事情。但是您可以像这样执行大约 0,0 的旋转:

<ellipse cx="0.079597" cy="0" rx="0.387098" ry="0.378826" transform="rotate(<angle> 0 0)"/>
于 2013-10-18T06:21:52.070 回答