.. Copyright (c) 2018-2025 William Emerison Six Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at https://www.gnu.org/licenses/fdl-1.3.html. *************************** Rotate the Square - Demo 12 *************************** Objective ^^^^^^^^^ Rotate the square around its origin. .. figure:: static/screenshots/demo12.png :class: no-scale :align: center :alt: Demo 12 :figclass: align-center Demo 12 How to Execute ^^^^^^^^^^^^^^ Load src/modelviewprojection/demo12.py in Spyder and hit the play button. Move the Paddles using the Keyboard ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ============== ============================================== Keyboard Input Action ============== ============================================== *w* Move Left Paddle Up *s* Move Left Paddle Down *k* Move Right Paddle Down *i* Move Right Paddle Up *d* Increase Left Paddle's Rotation *a* Decrease Left Paddle's Rotation *l* Increase Right Paddle's Rotation *j* Decrease Right Paddle's Rotation *UP* Move the camera up, moving the objects down *DOWN* Move the camera down, moving the objects up *LEFT* Move the camera left, moving the objects right *RIGHT* Move the camera right, moving the objects left *q* Rotate the square around its center ============== ============================================== Description ^^^^^^^^^^^ Cayley Graph ^^^^^^^^^^^^ .. figure:: static/demo11.png :class: no-scale :align: center :alt: Demo 12 :figclass: align-center Demo 12 Code ^^^^ Make a variable to determine the angle that the square will be rotated. .. literalinclude:: ../../src/modelviewprojection/demo12.py :language: python :start-after: doc-region-begin define square rotation :end-before: doc-region-end define square rotation :linenos: :lineno-match: :caption: src/modelviewprojection/demo12.py When 'q' is pressed, increase the angle. .. literalinclude:: ../../src/modelviewprojection/demo12.py :language: python :start-after: doc-region-begin define handle input :end-before: doc-region-end define handle input :linenos: :lineno-match: :caption: src/modelviewprojection/demo12.py :: ... Event Loop ~~~~~~~~~~ In the previous chapter, this was the rendering code for the square. .. literalinclude:: ../../src/modelviewprojection/demo11.py :language: python :start-after: doc-region-begin draw square :end-before: doc-region-end draw square :linenos: :lineno-match: :caption: src/modelviewprojection/demo11.py Since we just want to add one rotation at the end of the sequence of transformations from paddle 1 space to square space, just add a rotate call at the top. .. literalinclude:: ../../src/modelviewprojection/demo12.py :language: python :start-after: doc-region-begin draw square :end-before: doc-region-end draw square :linenos: :lineno-match: :caption: src/modelviewprojection/demo12.py The author is getting really tired of having to look at all the different transformation functions repeatedly defined for each object being drawn.