Met*_*ile 10 math coordinate-systems
我正在开发一款独立视频游戏,并且假设因为我的控制器上的拇指操纵杆具有圆形运动范围,它会返回"圆形"坐标; 也就是说,笛卡尔坐标约束为圆形区域(半径为1).实际上,坐标是"方形"; 例如,右上方的拇指操纵杆位置记录为x = 1,y = 1.当我将坐标从笛卡尔坐标转换为极坐标时,幅度可以超过1 - 这样的效果是玩家可以沿对角方向移动得比垂直或水平方向更快.
因此,为了澄清,我想记录模拟拇指操纵杆在方向和幅度方面的位置,其中幅度在0和1之间.拇指操纵杆返回方形平面上的坐标,因此只需将坐标从笛卡尔坐标转换为极坐标还不够.我想我需要转换坐标空间,但这就是我的猴脑的极限.
Eem*_*ola 17
请参阅将正方形映射到圆.映射还有一个很好的可视化.你得到:
xCircle = xSquare * sqrt(1 - 0.5*ySquare^2)
yCircle = ySquare * sqrt(1 - 0.5*xSquare^2)
Run Code Online (Sandbox Code Playgroud)
映射不是唯一的.这个问题还有很多其他解决方案.
例如,此映射也可以
u =x√(x²+y² - x²y²)/√(x²+y²)
v =y√(x²+y² - x²y²)/√(x²+y²)
其中(u,v)是圆盘坐标,(x,y)是方坐标.
一张图片胜过千言万语,所以这里有一些图片来说明映射的非唯一性及其逆.
For a C++ implementation对于其他映射,请访问
http://squircular.blogspot.com/2015/09/fg-squircle-mapping.html
有关映射结果的更多图像,请参阅http://squircular.blogspot.com.
有关讨论具有证明和推导的不同映射方程的论文,另请参见"平方圆盘的分析方法".