{"id":961,"date":"2016-03-27T18:23:36","date_gmt":"2016-03-27T18:23:36","guid":{"rendered":"http:\/\/fractorium.com\/?page_id=961"},"modified":"2024-12-08T22:04:35","modified_gmt":"2024-12-08T22:04:35","slug":"affine","status":"publish","type":"page","link":"http:\/\/fractorium.com\/?page_id=961","title":{"rendered":"Affine"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2209\" src=\"http:\/\/fractorium.com\/wp-content\/uploads\/affine-tab.png\" alt=\"\" width=\"620\" height=\"719\" srcset=\"http:\/\/fractorium.com\/wp-content\/uploads\/affine-tab.png 620w, http:\/\/fractorium.com\/wp-content\/uploads\/affine-tab-259x300.png 259w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1795\" src=\"http:\/\/fractorium.com\/wp-content\/uploads\/affine-context.png\" alt=\"\" width=\"322\" height=\"159\" \/><\/p>\n<p>Each xform has an affine transform that is always applied on every iteration. This is known as the pre affine because it is applied before the variations. There is also an optional affine applied after the variations known as the post affine. If the post affine is the identity transform, it is unused.<\/p>\n<p>You can right click in the numeric fields to get a menu of useful constants. Note that if you have <code>Right Click Toggles Spinboxes<\/code> checked in the <a href=\"http:\/\/fractorium.com\/?page_id=999\" target=\"_blank\" rel=\"noopener\">Options dialog<\/a>, then you must hold down shift for this menu to appear.<\/p>\n<p>In addition to being editable by using the controls below, affines can also be edited using the following keyboard shortcuts when the focus is on the image area.<\/p>\n<p>Q: rotate counter clockwise<br \/>\nE: rotate clockwise<br \/>\nW: move up<br \/>\nS: move down<br \/>\nA: move left<br \/>\nD: move right<br \/>\nG: shrink<br \/>\nH: grow<\/p>\n<p>Hold shift to decrease amount, control to increase amount.<\/p>\n<p>P: toggle visibility of xforms<br \/>\nL: toggle visibility of all\/selected xforms<\/p>\n<p>Hold shift to apply to post xforms.<\/p>\n<h3 class=\"collapseomatic \" id=\"id69d68f02b86dc\"  tabindex=\"0\"     >Pre affine transform<\/h3><div id=\"target-id69d68f02b86dc\" class=\"collapseomatic_content \">\n<p>The affine transform applied to the input points before variations are applied on each iteration.<\/p>\n<p>The values correspond to the usual affine transform syntax of:<\/p>\n<pre>tx = Ax * By + C\nty = Dx * Ey + F\n<\/pre>\n<p>like so:<\/p>\n<pre>A: X1, D: X2\nB: Y1, E: Y2\nC: O1, F: O2<\/pre>\n<h4>Enable<\/h4>\n<p style=\"padding-left: 30px;\">Toggling\u00a0shows\/hides pre affine transforms and enables\/disables the controls.<\/p>\n<h4>Reset<\/h4>\n<p style=\"padding-left: 30px;\">Reset the pre affine transform to the identity matrix.<\/p>\n<h4>Adjustments<\/h4>\n<p style=\"padding-left: 30px;\">Change the values of the pre affine transform as the tool tips describe.<\/p>\n<h4>Copy\/Paste<\/h4>\n<p style=\"padding-left: 30px;\">Copy the six affine values to the clip board, which can then be pasted to any pre\/post affine in any xform in any flame.<\/p>\n<h4>Random<\/h4>\n<p style=\"padding-left: 30px;\">Set each of the six values to a separate random number between -1 and 1, inclusive.<\/p>\n<h4>Swap<\/h4>\n<p style=\"padding-left: 30px;\">Swap the values of the pre and post affine transforms.<\/p>\n<\/div>\n<h3 class=\"collapseomatic \" id=\"id69d68f02b88a9\"  tabindex=\"0\"     >Post affine transform<\/h3><div id=\"target-id69d68f02b88a9\" class=\"collapseomatic_content \">\n<p>The affine transform applied to the sum gotten from\u00a0applying the variations.<\/p>\n<p>All controls are the same as for the pre affine, but are applied to the post affine.<\/p>\n<\/div>\n<h3 class=\"collapseomatic \" id=\"id69d68f02b897e\"  tabindex=\"0\"     >Pivot<\/h3><div id=\"target-id69d68f02b897e\" class=\"collapseomatic_content \">\n<p>This affects the behavior of dragging the affines in the render window.<\/p>\n<h4>When dragging the X or Y component of an affine transform and holding Shift+Alt:<\/h4>\n<p style=\"padding-left: 30px;\">Local: Rotate the point around the center of the transform.<\/p>\n<p style=\"padding-left: 30px;\">World: Rotate the point around 0, 0.<\/p>\n<h4>When dragging the center of an affine transform and holding Shift:<\/h4>\n<p style=\"padding-left: 30px;\">Local: Rotate entire transform around the origin, keeping its local orientation fixed.<\/p>\n<p style=\"padding-left: 30px;\">World: Rotate entire transform around the origin, also rotating the local orientation.<\/p>\n<h4>When reflecting an affine transform:<\/h4>\n<p style=\"padding-left: 30px;\">Local: Reflect horizontally and vertically around the center of the transform.<\/p>\n<p style=\"padding-left: 30px;\">World: Reflect horizontally around the Y axis, and vertically around the X axis.<\/p>\n<\/div>\n<h3 class=\"collapseomatic \" id=\"id69d68f02b8a50\"  tabindex=\"0\"     >Polar<\/h3><div id=\"target-id69d68f02b8a50\" class=\"collapseomatic_content \">\n<p>Check to display affine values in polar coordinates, uncheck to display them in Cartesian form.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Each xform has an affine transform that is always applied on every iteration. This is known as the pre affine because it is applied before the variations. There is also an optional affine applied after the variations known as the post affine. If the post affine is the identity transform, it is unused. You can [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":422,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-961","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/pages\/961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/fractorium.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=961"}],"version-history":[{"count":42,"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/pages\/961\/revisions"}],"predecessor-version":[{"id":2426,"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/pages\/961\/revisions\/2426"}],"up":[{"embeddable":true,"href":"http:\/\/fractorium.com\/index.php?rest_route=\/wp\/v2\/pages\/422"}],"wp:attachment":[{"href":"http:\/\/fractorium.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}