【问题标题】:3D plot of galaxy or universe [closed]星系或宇宙的 3D 图
【发布时间】:2014-01-29 08:56:25
【问题描述】:

R 代码是否可用于创建银河系或宇宙的 3D 图?在过去的六个月里,我搜索了几次,但没有找到。

这篇新闻文章包含了一些非常漂亮的 3D 图,它们看起来像是用 R 创建的:

http://www.dailymail.co.uk/sciencetech/article-2341750/The-beautiful-3D-map-space-plots-nearest-galaxies--reminds-tiny-Earth-is.html

可以在上面的链接中观看一个简短的视频,但我在那里没有看到 R 代码的链接。这段视频是由里昂大学和夏威夷大学的人制作的。这是与同一项目相关的较长视频的链接:

http://irfu.cea.fr/cosmography

我只是认为从 R 中的 3D 绘图中探索空间会很整洁,但我找不到任何相关代码。

可能在 Redshift 目录中找到对象的位置,也许可以下载,但我不知道如果我尝试创建自己的 3D 地图,是否需要以各种方式调整这些位置数据。如果我要尝试创建自己的地图,以下是一种可能的数据来源:

https://www.cfa.harvard.edu/~dfabricant/huchra/zcat/

我读过一些东西,大意是要求相关的包裹并不能成为合适的帖子。对不起,如果这篇文章不合适。

【问题讨论】:

  • 问题不是代码而是数据:找到数据然后你就可以写一些代码了。
  • rgl 提供 3D 渲染。如果你得到了 x、y、z 坐标或星星之间的距离 (=> cmdscale()),应该可以不费吹灰之力 (?)。
  • 使用rgl 在 3d 立方体内绘制点相对容易。矢量场的二维投影?可能与 ggplot:stackoverflow.com/questions/14936504/…。不过,除此之外没有其他想法。
  • 您可能也对 Celestia 感兴趣:portableapps.com/apps/education/celestia_portable

标签: r 3d plot


【解决方案1】:

问题不在于建模,而在于数据。这是一个由 . http://www.stellar-database.com/isdb.mdb - 但可能你需要四处寻找你想要的东西。

这是一个简单的 SQL 查询,用于提取一些星数据:

SELECT Positions.OwnerID, Positions.RA_hr, Positions.RA_min, Positions.RA_sec, Positions.Dec_deg, Positions.Dec_arcmin, Positions.Dec_arcsec, Positions.Distance, Spectra.SpectralClass, Spectra.LuminosityClass, qryProps.Name
FROM (Positions LEFT JOIN Spectra ON Positions.OwnerID = Spectra.OwnerID) LEFT JOIN qryProps ON Positions.OwnerID = qryProps.OwnerID
WHERE (((Positions.Distance)>=0));

然后保存为csv并导入:

stars<-read.csv("qNamedStars.txt",header=T)
head(stars)

编写一个函数将坐标转换为 X、Y、Z

celCoords<-function(Rh,Rm,Rs,Da,Dm,Ds,Distance){
  R.angle<-((Rh/24)+(Rm/(24*60))+(Rm/(24*60*60)))*2*pi
  D.angle<-(Da/90)+(Dm/(90*60))+(Ds/(90*60*60))*0.5*pi
  Z<-cos(D.angle)*Distance
  hyp.XY<-sin(D.angle)*Distance
  X<-sin(R.angle)*hyp.XY
  Y<-cos(R.angle)*hyp.XY
  return(c(X,Y,Z))
}

starcoords<-cbind(stars,
      matrix(celCoords(stars$RA_hr,
          stars$RA_min,
          stars$RA_sec,
          stars$Dec_deg,
          stars$Dec_arcmin,
          stars$Dec_arcsec,
          stars$Distance
          ),,ncol=3,byrow=T)
        )

colnames(starcoords)<-c(colnames(stars),"X","Y","Z")

过滤data.frame

sf<-starcoords[abs(starcoords$Z)<2000 &  abs(starcoords$X)<1000,] # apply a filter

然后使用rgl进行绘图

require(rgl)
plot3d(sf$X,sf$Y,sf$Z,col=rainbow(nrow(sf)),size=10)

如果可用的话,您显然可以添加更多关于亮度、大小、类型等的数据,然后使用这些参数来设置大小、颜色等。

【讨论】:

  • 这是一个很好的答案。虽然我从未使用过 SQL。你能推荐一个免费的 SQL 源还是我只需要安装一个 R 包来进行查询?
  • 她的文本文件(可能更简单),drive.google.com/file/d/0B85i6kIzoV0odkxlbWZxa1pVTzQ/…>
  • 这是一个包含更大银河数据的文件(虽然不是所有的都有名字等)drive.google.com/file/d/0B85i6kIzoV0oX2hIVUtGUUJqM3c/…>
  • 如果帖子被删除,我会将其和您的回答移至我的维基百科用户页面和我的 github 站点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多