我正在尝试使用OpenGL片段着色器将所有圆坐标映射到平坦表面,如图所示。我知道圆的半径和中心点。所以我尝试使用以下等式:
对于原点(j, k)和半径为r的圆:
x(t) = r cos(t) + j
y(t) = r sin(t) + k
如果你需要运行这个t方程,取0到360范围内的值,那么你将得到圆边界上的x和y。
但我面临以下问题:
有许多方法可以将圆点映射到正方形,反之亦然。为了简单起见,圆心是(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)