gpt4 book ai didi

math - 将极角映射到 0..1

转载 作者:行者123 更新时间:2023-12-04 18:31:36 24 4
gpt4 key购买 nike

给定笛卡尔坐标位置,如何将原点的角度映射到 0 .. 1 范围内?

我试过:

sweep = atan(pos.y,pos.x) + PI) / (2.*PI);

(其中扫描应介于 0 和 1 之间)

这是 GLSL,所以 atan函数对两个参数(y 然后 x)感到满意并返回 -PI ... PI

这在左上象限中给出了 1,在右上象限中给出了一个很好的梯度,循环到右下象限,然后在左下象限中给出了 0:

A badly mapped atan

如何获得漂亮的单渐变扫描?我想要某处的最大扫描,以及逆时针相邻的最小扫描。

这是我的 GLSL 着色器代码:

顶点着色器:

uniform mat4 MVP_MATRIX;
attribute vec2 VERTEX;
varying vec2 pos;
void main() {
gl_Position = MVP_MATRIX * vec4(VERTEX,-2,1.);
pos = gl_Position.xy;
}

片段着色器:

uniform vec4 COLOUR;
varying vec2 pos;
void main() {
float PI = 3.14159265358979323846264;
float sweep = (atan(pos.y,pos.x) + PI) / (2.*PI);
gl_FragColor = vec4(COLOUR.rgb * sweep,COLOUR.a);
}

最佳答案

大多数编程语言都有一个双参数版本的 atan,通常称为 atan2 这通常会给出 (-PI, PI) 范围内的结果。要转换对于值 0-1,您可以使用:

(atan2(y,x) + PI) / (2*PI)

由于您的语言的 atan 函数有两个参数,它可能与 atan2 做同样的事情。

关于math - 将极角映射到 0..1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10619382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com