如何将图像投影到球体

时间:2017-04-25 19:49:35

标签: java mercator

我正在尝试使用mercator将以下图像投影到球体: enter image description here

我使用以下公式得到了这一点:how map 2d grid points (x,y) onto sphere as 3d points (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);
}

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

enter image description here

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

修改

我已经达到了以下公式:

    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));

但是,我的外边缘有一个奇怪的环,如图所示:

enter image description here

0 个答案:

没有答案