0

我正在尝试使用墨卡托将以下图像投影到球体: 在此处输入图像描述

我已经使用这个公式走了这么远:如何将 2d 网格点 (x,y) 映射到球体上作为 3d 点 (x,y,z)

我的代码如下从(X,Y)生成坐标:

public void generateSphericalCoords(){
    int R = 400; // Image Radius
    int S = 400; // Sphere Radius

    float longitude = (float)(this.x)/R;
    float latitude = (float) (2*Math.atan(Math.exp((double)(this.y)/R)) - Math.PI/2);
    sphericalX = (int) (S*Math.cos(latitude) * Math.cos(longitude)) + 300;
    sphericalY = (int) (S*Math.cos(latitude) * Math.sin(longitude)) + 300;
    sphericalZ = (int) (S*Math.sin(longitude));
    //System.out.println(sphericalX + " " + sphericalY + " " + sphericalZ);
}

但是,我没有得到一个完美的球体,而是得到了这个:

在此处输入图像描述

我究竟做错了什么?任何帮助将不胜感激。

编辑:

我得到了以下公式:

    float longitude = (float) ((float)(Math.PI*this.x)/R - Math.PI/2);
    float latitude = (float) (Math.PI*2*Math.atan(Math.exp((float)(this.y)/R)));
    sphericalX = (int) (S*Math.cos(latitude) * Math.cos(longitude)) + 300;
    sphericalY = (int) (S*Math.cos(latitude) * Math.sin(longitude)) + 300;
    sphericalZ = (int) (S*Math.sin(longitude));

但是,我在外边缘得到了一个奇怪的环,如图所示:

在此处输入图像描述

4

0 回答 0