提问者:小点点

如何使用半径和中心坐标在圆中找到点坐标


我正在尝试使用OpenGL片段着色器将所有圆坐标映射到平坦表面,如图所示。我知道圆的半径和中心点。所以我尝试使用以下等式:

对于原点(j, k)和半径为r的圆:

x(t) = r cos(t) + j
y(t) = r sin(t) + k

如果你需要运行这个t方程,取0到360范围内的值,那么你将得到圆边界上的x和y。

但我面临以下问题:

  1. 角度值以度为单位。我可以直接在片段着色器代码中使用它吗,因为OpenGL的坐标从0.0到1.0?


共1个答案

匿名用户

有许多方法可以将圆点映射到正方形,反之亦然。为了简单起见,圆心是(0,0),半径是1。

设正方形的坐标为(x, y),圆的对应坐标为(u,v)。

所以要得到圆点:

u = x * sqrt(1 - y^2/2)
v = y * sqrt(1 - x^2/2)

反式更复杂:

x = (sqrt(2 + u*u-v*v+2*u*sqrt(2)) - sqrt(2 + u*u-v*v - 2*u*sqrt(2))) / 2
y = (sqrt(2 - u*u+v*v+2*v*sqrt(2)) - sqrt(2 - u*u+v*v - 2*v*sqrt(2))) / 2

请注意,您可能想要在所需平方点对应的圆处获取点,因此只需要第一个公式对

附言也许我几年前在那里学过公式

如果你需要一步一步地走过圆点(虽然我怀疑你真的需要这个),你可以扫描Y坐标并获得X坐标的扫描线。伪代码:

for y = - R to R step d:
   L = sqrt(R*R-y*y)
   for x = -L to L step d:
      getPoint(cx + x, cy + y)