0

在这个例子中,我对旋转和平移的使用感到困惑,更具体地说,

// The earth rotates around the sun
  pushMatrix();
  rotate(theta);
  translate(50,0);
  fill(50,200,255);
  ellipse(0,0,10,10); 

rotate(theta);旋转什么?旋转和平移的关系是什么?

4

1 回答 1

1

rotate 和 translate 作用于当前坐标系。

即绘制动作(rect()、ellipse() 等...)将在当前坐标系中应用。旋转和平移将移动坐标系。

在您提供的代码块之前,当前点被转换到窗口的中心以绘制太阳。

pushMatrix() 保存该位置,然后相对于太阳中心,“一切”(坐标系)由 theta 旋转,“一切”由 (50,0) 平移,有效地将“当前点”移动到正确的位置然后使用椭圆(0,0,10,10)绘制地球。

请注意,您可能会省略翻译步骤并使用 ellipse(50,0,10,10) 来获得相同的视觉结果,如果不是因为下一个代码块依赖于该翻译来正确获取月球位置.

这是一个有趣的链接,它用“移动方格纸”来解释这一点

于 2012-12-30T22:20:50.577 回答