最近搞图形编程老是卡在坐标问题上,气的我直接掀了键盘。反正手头项目也没啥进度了,干脆花三天狠狠对比了下笛卡儿坐标和极坐标,今天就把踩过的坑全抖出来。
一开始我头铁得很,拿着笛卡儿坐标就开始画旋转动画。X轴Y轴标得清清楚楚,想着这总不会出错?结果给风扇叶片做旋转轨迹时差点崩溃:明明只要让叶片绕着中心转圈,但每个叶片的坐标都要用三角函数算,代码写成这德行:
叶片1: X=圆心X + 半径 cos(角度)叶片2: X=圆心X + 半径 cos(角度+45°)
光改个转速就要重算所有坐标,调试时候数值看得我眼冒金星。气得我一脚踢飞凳子:"这特么是人干的事?"
第二天抱着试试看的心态切到极坐标。没想到刚写两行代码就笑出声:每个叶片只要管自己的半径和角度就行!改转速直接调整角速度参数,五个叶片的代码缩成三行:
- 半径:全部定死10像素
- 角度:初始值按72°间隔分布
- 每次刷新:角度 += 角速度
但马上又撞上新问题。做物体直线移动时,想计算移动轨迹简直要命:极坐标里根本没有现成的X/Y分量! 比如让飞船向右上角45°飞,得先换算移动距离cos45°当半径分量,再反推回笛卡儿坐标。等捣腾完坐标转换公式,半小时都过去了。
折腾出这样的规则:旋转类任务用极坐标,位移类操作用笛卡儿坐标。后来做行星轨道系统时直接混搭着用:行星用极坐标算公转角度,太空站位置就用笛卡儿坐标定位。切换时需要转换公式,但总比吊死在一个坐标系强。
结论很简单:
- ⚡转圈圈/放射形图案 → 极坐标爽到飞起
- 📦位置对齐/网格分布 → 笛卡儿坐标闭眼用
要我说,成年人就该全都要。昨晚十二点还在测试坐标转换函数,结果冰箱没可乐了。只好翻出过年剩的RIO兑红牛,边喝边写转换公式——这就是程序员の夜生活罢(苦涩