c++ - 球坐标映射创建双 epsilons

标签 c++ graphics imagemagick

这是一张图片:http://i.imgur.com/MRvz24u.gif

所以我可以说出问题是什么,我用于球坐标的 epsilon(或任何符号)重复出现。所以我计算点数的方式是:

double theta = acos(p.getY()/p.magnitude());
theta = theta/3.1415926;

double epsilon = atan(p.getZ()/p.getX());
epsilon = epsilon + 3.1415926/2;
epsilon = epsilon /3.1415926;

我很确定剩下的不是问题,但我会把它放在这里以防万一

    int w = texture ->columns();
    int h = texture ->rows();

    double x = w * epsilon ; x = (int) x;
    double y = h * theta; y = (int) y;

    int row = y;
    int column = x;

    Magick::PixelPacket *pixels = texture->getPixels(0, 0, w, h);
    Magick::Color color = pixels[w * row + column];

    double range = pow(2, texture -> modulusDepth());

    double r = color.redQuantum()/range ;
    double g = color.greenQuantum()/range ;
    double b = color.blueQuantum()/range ;

    return Color(r, g, b, 0);

我不确定为什么我会得到重复值,因为我的范围最初应该是 -pi/2 < epsilon < pi/2 并且我只是移动它然后缩放它。

最佳答案

使用 atan2 而不是 atanatan 接受 x/y 而 atan2 接受 x,y 。

这允许 atan2 处理 x 和 y 都为负的情况与它们为正的情况不同。 atan 无法知道。

关于c++ - 球坐标映射创建双 epsilons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575878/

相关文章:

python - Matplotlib axvspan - 实心填充?

fonts - 让 ImageMagick 识别字体

c++ - 在 for 循环定义中使用 cin

c++ - Visual Studio 2012 中的立方根函数 cbrt()

python - randint() 只生成高值并且没有绘制足够的对象

php - 需要想法只显示一些像素并将剩余像素变灰

python - 如何从图像中删除水平和垂直线

c++ - 如何将std::vector <std::vector <double >>转换为Torch::Tensor?

c++ - 当我收到 `slicing` 的案例时?

java - 将 BufferedImage 设置为 Java 中的颜色