R 星系或宇宙的三维绘图

R 星系或宇宙的三维绘图,r,3d,plot,R,3d,Plot,R代码是否可用于创建银河系或宇宙的3D图?在过去的六个月中,我已经搜索了几次,但都没有找到 这篇新闻文章包括一些非常漂亮的3D绘图,看起来它们可能是用R创建的: 在上面的链接中可以看到一段短视频,但我没有看到R代码的链接。这段视频是由里昂大学和夏威夷大学的人制作的。以下是与同一项目相关的较长视频的链接: 我只是觉得在R中的3D绘图中探索空间会很好,但我找不到任何相关的代码 对象的位置可能在红移目录中找到,也许可以下载,但我不知道如果我尝试创建自己的3D地图,是否需要以各种方式调整这些位置数据

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

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

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

我只是觉得在R中的3D绘图中探索空间会很好,但我找不到任何相关的代码

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


我读到一些大意是,要求提供相关的软件包并不能获得合适的职位。如果这篇文章不合适,很抱歉。

问题不在于建模,而在于数据。这是一个数据库,由。-但也许你需要挖掘你想要的东西

下面是一个简单的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)


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

问题不在于代码,而在于数据:找到数据,然后您可以编写一些代码。
rgl
提供3D渲染。如果您获得了x、y、z坐标或星星之间的距离(=>
cmdscale()
),则无需花费太多精力(?)即可完成。使用
rgl
在三维立方体中绘制点相对容易。向量场的二维投影?可能与ggplot:。除此之外,你可能还对Celestia感兴趣:这是一个很好的答案。虽然我从未使用过SQL。你能推荐一个免费的SQL源吗?或者我只需要安装一个R包来进行查询;这是一个文本文件(可能更简单),这是一个包含更大银河数据的文件(尽管并非所有文件都有名称等)。如果这篇文章被删除,我将把它和你的答案移动到我的Wikipedia用户页面和我的github站点。
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")
sf<-starcoords[abs(starcoords$Z)<2000 &  abs(starcoords$X)<1000,] # apply a filter
require(rgl)
plot3d(sf$X,sf$Y,sf$Z,col=rainbow(nrow(sf)),size=10)