The Tiles Deluxe Transformation

2 views
Skip to first unread message

Jussi

unread,
Feb 23, 2008, 12:19:42 PM2/23/08
to UFBeta
Hi all,
I've subscribed this group for a while already but haven't posted
anything before. I have recently been working on a somewhat complex
formula that should be tested carefully before I submit it to the
formula database.

The Tiles Deluxe transformation aims to help in creation and use of
tiled images in UF. The formula has some boolean parameter modifiers
and three different view modes resulting in about 10 different
coordinate calculation steps. Although it seems to me be working
correctly, I wanted to post it here because bugs can easily sneak in
into all that mess. It was quite a pain to get it right (?) in the
first place.

As the formula has some nontrivial features for nontrivial uses, I
also wrote a little tutorial explaining and illustrating its use. Also
see the formula parameter documentation for details in how the
parameters work.

Please let me know if you find illogical behavior, bugs or errors in
the formula or its parameter documentation.

Regards,
Jussi

* Tiles Deluxe Quick Tutorial *

Start with the default settings. View mode is One tile by default
which means that only one tile is shown in the image. This mode is
intended for searching nteresting patterns - you can use mouse with
modifier keys in a WYSIWYG manner.

After you've found something interesting, switch to the Tile grid mode
to see how that interesting area tiles when repeated twice and
mirrored (Number of tiles is 2 and Symmetric tiling is checked by
default).

I wanted the formula to behave nicely with my Poles transform (in
jh.uxf) as well as with zooming/rotating/panning. If Use screen
coordinates is checked, however, the tiled image changes when the
location is changed.

By default, the Use screen coordinates is checked. This means that the
location parameters specified in the location tab define the area in
the complex plane from where the tile contents are calculated. Uncheck
the Use screen coordinates and copy the center, magnification and
angle parameters from the location tab to recreate the earlier tiled
image. Now the tiled image is independent of the location tab - if you
zoom or rotate the image, the result is unchanged.

Now add the Poles transform from jh.uxf and reset the location tab. If
you now zoom/rotate/pan, the resulting image changes in unexpected
ways. This is because The Tile Grid mode is selected and the tiles are
calculated independent of the location tab, but the location of poles
in the Poles transform changes as the location changes.

To eliminate this effect, select the Fixed grid view mode. Now the
tiles have fixed locations in the complex plane and zooming/rotating/
panning doesn't change their location.

Attached are an example upr that's been created with the above
instructions and the Tiles Deluxe formula. Other formulas should
already be available in the public database.


tilesDeluxeTutorialSample {
::i6KbDjn2VSVTvRNMQ07r0+fwKXRbWbnvB5DQBEUpKqocvyE7srpJ2BbH6u87lfDcmx2plK6J
uZPem5NzbeeGs8ePf8lb3gQelfUyy8qRp7tyxlTSkfxbsK+IyxnmHlZo7VC/
RWNGjOKVHO6Z
lwxR+Zp1xIhk0blCl3xyucx5UoP8L7d/
WL1viunWsnixtZb3E9PC5k0f0IYTLje1M35Q98Zv

yoZZvh3f3BrZRLyQmZevyfmRw4tbm4zzK9hY49StXaZ7w5tV4muuqym6948mCSDtFXirqRT8
DaGJvlSJk2GEXfA6xdESFESsg9Wu2NYsTOGd7mHvFz/AQFa+EQKf7Y
+yphMEAo9c46uZDQTZ

o5b1LTXHOzKgLOzitXyw7xh4nvVIdelmH7JwIYRea2AEinRgLDKrzHiGKpccdVXHtlUuHOX2
gpNldkUacyejWs6YMN+jKbyAeP5/pujj3di48NU+/QJv/KjA899qTSB6gVJySoaGGcS/
adv4
k3ceCGYQeOLdpG/Lhkxopn/Iw1yX7ml9em2kSRAtVTk1kAKEp+CjxKCEDE
+T99i0EFnTJ4um
KYYWUSxtVrPfFMNVDq+EhWk3BUEmU/EsSz3iqcaDpb7mAlsMyTiN+JVI5gMCaIpt/os/
OG0k
/DfNM9Ifdt0CZAqSxlLjK+KvMFoLyLE/MOZkiQ52SohqFkc0QxObuHQi
+XZg2MFaXj9zchax
BhUUVUVVU0hr6KoNPzvUnQB3qJdlh2Mm4B4/qJK5j4FtBsKoE42HZSQb+
+kfJxyX5qRzCMCk
AOKtTJkv8vafZIQtc7Gwln/k77WPyZGVCWJttuhSLap/
Dj1PGZmVS7mJjxf8jAVHHTXAfi9Z

PQbpHfaNljf3a33bGN2PtK6g7cY7z1RiMJ4WJ1tbOYBSEQLtEwAqSdYlzNqwSKQBzP765pTR
/yzQuIuxEZN+k+ZXTEYlWIPxI1oI
+whmmGKpa1O406D4HsUTfwVaXNB2sAUXaFVsgWhSbW9H
/4CMaV12N/RJv57X
}

jh.uxf:jh-tiles-deluxe {
; (c) 2007-2008 Jussi Härkönen
;
; This transform has been designed for easy creation and use of tiled
images.
;
; 07-02-10 First version
; 07-02-23 Implemented View mode and screen coordinate parameters
::NgwJThn2tiVWvxtNQ43DQ
+PwuGIdlzeZnYUgU4AH4iiagmmg402HSzDclo2lNSkLEls3tI/4
7M8QkUH2bRjhfwWcO
+m7hcThcNt4VP9JEyPSupkuhRujzunQrYUyd0KOddBTpPPvQSrJckm3
o2xSrJXSmey98s6tJklwfulx3stOxT7WaRuWm/i+kn
+EjaumWk2UQrZGhRM8RoKClk3ISr5S
BRmTq3ygPq1UFF+ISBXgf2InCZKVTbNdN
+FeOZaI8eN5lLWt8FLWphEpLcA4f2iLwjYFK2Yk
c+iVgxFIWNDiMeuzcuNlW4MlMeJToAMpIrPQgPJ45cDKRi7L
+ufZJ5EkLnsffFLt1bpSrYMR
gO6EV8Ymc6Q+eP518iArB9bX1oY34NSrHzTHI1u
+gWnWEVXFLbrniQ8KHzvcgyr8b1G31SZV
GXAWryCBP1OI451DhwkKb6UjiL2ozhQE1PWMuoBvnOIABDt182usOgRhu7/
IUeBCfJ5cHxpy
ydFs9kKGAV+ds3lnrYI5B+wThTpFTvSqPLh8cQF8d6M72PmMmA/IInb5/DLWkWRcWS/
SQqYD
m9KgSsMOFybnuBEjA/
SGbDET0ZyobECSVJdyh0MfJZ1iVn9Dv8iX8CA8X1ewTfSdFIxcZV5r
MecjyR/
EA82INoIhEgCqEZFfD81iozBNnRqlEfpQbPg8KaaNtYB5kd89sCoBgYXD40AWUAVc
VggIqDqaW5iWnATUzqARHqrt07CRCRbCoO1IQ3bMVzH45yMto2zUGBCNNJ0C
+GBQ8OaFtoAQ
EwFSlp/ALbDT1CgPYDaWJGhkeAB
+NQ7WFahgODPVeHrSZgE29+Tz9ZAzmf2nJ7JfK4Ln9ZLO

cpQOQ8rSfme30rr7RTbNMCu3KzYkv7SykfGCGZkNV8sJJ9rQHwcVGq6iBI3itf3Ud278T05q
JJQS2Ub4eO5EDL2M7Y9U9A
+XrCHzwAF3DLL73UNuH0vrYEDuy4Qj76iD6Ik6L8dk2SB7IL5/
T0ZcA96GBm/WW6XwQiBJQFgspWxzY
+MlpSBANIhStVevt9IE5Scxygg5lQw8dCDfTSIP7Zwp
01qp6WUjBPIE96g2PJk/yYOwPf9rEN/6uZPI/
nlk0m68+RNl5anuSWwR3XhsywyJmvANBraY
dDTtS7Ouivug5An7cfZJGPE8jovQh8eojQBLv2JkUZlIoJxwVormtawySdpQnSvgY/
oOOoRf

3BBJmxPOY9md7gQvC6kiTHhO7imy1AOx1tAOUaAbGyMMMMTsC7RMU9vPlx5cHmfchBABfUr6
T7brPvDfGp5Dm69vaTi1p1zJZSx3XrtR2AW4jCojFE+dA1O2sY/
mZI5+PMuWCKgiPNJUCHGV
CRlQ9kQQkB3u6QZJru6QSgbz5fWt4C9wVIQD7Vi9Nh2UwsSDH
+GXEMbH8jQbDpbAsRUanvC3

6oiVS5CTKuiW2Sz4+BU7nO25O2P8Isf4hYPKQ5CLhlJhtVHDozj3QDEjsa6YEvMs5XcwcM9e
YU9aU1InfMBadDSX0EDtpSRNX0IbUIOh+A+o0YwLw4nrveB2DfMyD9VLPPxHE/
PJ9DjKdIm3
a3tD/C6f/
x2M21UYU4Qjaf0xrnf6omndZ6RwHM7aevmwO0Ow6NjihT7cnCfrmO2Xels0vDR7

Sqd3l4xuoFxtC9ludqALtd5rgdvGaPx4eytCSfXgr7Js2bI8QyzFYDWvJjlTbKq1XmomXrv6
xEzsjfiV0snNx4kwdvLJuBSWXPdn1jPRf/
DchnJmjsiF7m40dTJJcKmRLm9ZjWu1+qBcRdkg
JYyMclRcvBc4kdBAl+GC4SXiFEnwtMwLxBz+Fl0/gkCL94oEnNnCOQ/eQ4aEqFkW0Z5ga
+nO
SzPj3eHFIXJ4aJt7q8bdWJQ7OZYMsjA5+rmZMYzFFNABS7XQuR/
cNEvHzYt436IL7uYmFjsP
+TdrZlSFk1whZ/djCX5yf5+2HBqj8qprXMxm/
oNg4L7YSRiW0xngYvVOtU2Iq7lkMFut7sV+

XVyG8vtNkr3vTzLaIGdsgsiUyw7XLk2PNDl0FzwuZ2vosBC0faerHTtRXDx0qbtUWYtjgG/
9
MG7B8Ubz
+e2jbFZvpENxYKMxokXVB79K2kgYjmulz0rH3ZOyw40M6zAU3ue9QZncueg8cXlJ
+ek4i9xXRxXe
+QBlwNBLtfTnjBJyVsdM928mXY0US1JnqNBeoMr4wxNxPWWktiuXTdn51N7Z
s5U/DSaNk/
cLmNgXtjlNL4BFiefUX9INw0sE0xS00D9gAyqunrYz82slBfRvVqDZzhh2439L
ygDlrWz9s4z6Fej9hYQeAvSc4turae8wUvhhDGscFjeyOiioHt5jf24wOMTt/
Atfm5a9E7u6
ZLHvTrtJqdw/OJQ7xEwfb/XVtrZE9wrHXg/bhlEp2jK318klDm6iHN
+yCfrhe7TyafA2uo/f
BkSev8M=
}

Bill Smith

unread,
Feb 23, 2008, 12:48:39 PM2/23/08
to UFB...@googlegroups.com
Hi Jussi
I don't see the formula anyware, am I missing something?
Cheers
Bill

Ron Barnett

unread,
Feb 23, 2008, 1:31:26 PM2/23/08
to UFB...@googlegroups.com
Hi Jussi,

Tiling is an area that I have explored from time to time, especially using images. I am looking forward to seeing the formula. Like Bill, where do you have it stored?

Ron Barnett
--
Ron Barnett
fracta...@gmail.com
http://hiddendimension.com
If life is a bowl of cherries why do I always get the pits?
^^^^^^^^^^^^^^^^^^^^^^^^

Ken Childress

unread,
Feb 23, 2008, 2:07:01 PM2/23/08
to UFB...@googlegroups.com
Ron/Bill,

The formula is in Jussi's post. You'll have to copy and paste it into
a local file.

Ken...

> fracta...@gmail.com <mailto:fracta...@gmail.com>

Tres Amie

unread,
Feb 23, 2008, 3:58:58 PM2/23/08
to UFB...@googlegroups.com
Ken,
 
I did as you said, but when I point to that file, I get a full list of error messages and the transform button for that formula shows a red exclamation point.  Any suggestions?
 
~Vivian

Ken Childress <ke...@bww.com> wrote:
> http://hiddendimension.com
> If life is a bowl of cherries why do I always get the pits?
> ^^^^^^^^^^^^^^^^^^^^^^^^
> >



Looking for last minute shopping deals? Find them fast with Yahoo! Search.

FractAlchemist

unread,
Feb 23, 2008, 5:06:48 PM2/23/08
to UFB...@googlegroups.com
Hello Jussi, could you please post your beta uxf in it's proper form in the files section of the UF beta group?
 Everyone can find and use it without problems in this way.

http://groups.google.com/group/UFBeta/files

 Feel free to post your tutorial as a page in:

http://groups.google.com/group/UFBeta/web

Thank you for contributing:-))) Evie
--
Eveline Berkman

http://www.fractalchemist.com
http://www.renderosity.com/mod/gallery/browse.php?username=fractalchemist

"When the student is ready, the teacher will appear."

Bill Smith

unread,
Feb 23, 2008, 6:12:44 PM2/23/08
to UFB...@googlegroups.com
Ken
As did I, nothing but error mesages.
To me what I thought was the formula
looked like a upr file
Bill

Bill Smith

unread,
Feb 23, 2008, 7:07:59 PM2/23/08
to UFB...@googlegroups.com
Hi all
For those who couldn't get this transform to work.
I finally got this to work by removing these lines (inside quote marks) just
below Jussi's name
";

; This transform has been designed for easy creation and use of tiled
images."
I am not sure if it is working properly though
Cheers

Bill
----- Original Message -----
From: "Jussi" <juhar...@gmail.com>
To: "UFBeta" <UFB...@googlegroups.com>
Sent: Saturday, February 23, 2008 12:19 PM
Subject: [UFBeta] The Tiles Deluxe Transformation

Ron Barnett

unread,
Feb 23, 2008, 7:08:01 PM2/23/08
to UFB...@googlegroups.com
Bill,
 
I got it to work. There were many line wraps that needed to be fixed, and since the transform was in a compressed format, I sort of had to guess about some of the wraps. It a cool transform, by the way.
 
Ron

Bill Smith

unread,
Feb 23, 2008, 8:24:38 PM2/23/08
to UFB...@googlegroups.com
Thanks Ron

Jayce Cruel

unread,
Feb 23, 2008, 11:29:34 PM2/23/08
to UFB...@googlegroups.com
Here- I uncompressed it and saved it as a text file...should make it easier, I hope


Never miss a thing. Make Yahoo your homepage.
jh.txt

Jayce Cruel

unread,
Feb 23, 2008, 11:38:31 PM2/23/08
to UFB...@googlegroups.com
oops...my bad- forgot the } at the end...

fixed



-----Inline Attachment Follows-----


jh-tiles-deluxe {
; (c) 2007-2008 Jussi Härkönen
;
; 07-02-10 First version
; 07-02-23 Implemented View mode and screen coordinate parameters
global:
  ; Image view area variables:
  float imageAspect = (#width) / (#height)
  float halfImageHeight

  ; Calculate image height as a function of the aspect ratio as in the
  ; location tab
  if (imageAspect > 4.0/3.0)
    halfImageHeight = 1.5
  else
    halfImageHeight = 2.0 / imageAspect
  endif

  ; Scale image dimensions by magnification
  halfImageHeight = halfImageHeight / #magn

  ; Precalculate screen dimensions
  float imageHeight = 2 * halfImageHeight


  float tileAspect
  if (@useImageAspect)
    tileAspect = imageAspect
  else
    tileAspect = @tileAspect
  endif
 
  float viewHeight
  if (@useScreenCoordinates)
    viewHeight = imageHeight
  else
    ; Calculate height using the tile magnification
    viewHeight = imageHeight * #magn / @tileMagnification
  endif
 
  float halfViewHeight = viewHeight / 2
 
  complex relativeOffset = tileAspect * real(@offset) + flip(imag(@offset))
 
  complex relativeTileSize = tileAspect + flip(1)

  ; Calculate angle in radians (given in degrees by the user)
  float tileAngle = 0.0174533 * @tileAngle
transform:
   
  ; View coordinates denote the original coordinates used to calculate the
  ; fractal. #pixel (input) uses this coordinate system.

  ; Centered coordinates have the origin translated to view center and the axes
  ; are aligned parallel to the image edges.

  ; Relative centered coordinate have the origin in view center
  ; and the tile covers the area [-tileAspect,-1] x [tileAspect,1].

  complex centeredLocation
  complex relativeCenteredLocation

  if (@viewMode != "Fixed grid")
    ; Calculate centered coordinates
    centeredLocation = exp(flip(-#angle)) * (#pixel - #center)

    ; Calculate relative centered coordinates
    relativeCenteredLocation = centeredLocation / halfImageHeight
  else
    ; Use pixel directly and skip transformation to relative centered coordinates
    relativeCenteredLocation = #pixel
  endif
 
  ; Check if pixel is outside the tile (only in show tile mode)
  if ((@viewMode == "One tile") && ((abs(real(relativeCenteredLocation)) > tileAspect) \
      || (abs(imag(relativeCenteredLocation)) > 1)))
    ; Pixel is outside the tile - Use solid color
    #solid = true
  else
    ; Pixel is visible
     
    ; Relative coordniates have the origin translated to lower left
    ; corner and the tile covers the area [0,0] x [tileAspect,1].
    complex relativeLocation = (relativeCenteredLocation + relativeTileSize) / 2

    ; Apply scaling by number of tiles and offset
    complex relativeOffsetLocation
    if (@viewMode != "One tile")
      relativeOffsetLocation = @numTiles * relativeLocation + relativeOffset
    else
      ; Show tile only - don't scale by number of tiles
      relativeOffsetLocation = relativeLocation + relativeOffset
    endif

    ; Add offset
    float xRelativeOffsetLocation = real(relativeOffsetLocation)
    float yRelativeOffsetLocation = imag(relativeOffsetLocation)

    if (@useSymmetry)
      ; Scale by 0.5 to compensate for symmetry transform later on so the
      ; tile size remains the same
      xRelativeOffsetLocation = 0.5 * xRelativeOffsetLocation
      yRelativeOffsetLocation = 0.5 * yRelativeOffsetLocation
    endif

    float xRrelativeTiledLocation = xRelativeOffsetLocation - tileAspect * floor(xRelativeOffsetLocation / tileAspect)
    float yRrelativeTiledLocation = yRelativeOffsetLocation - floor(yRelativeOffsetLocation)

    if (@useSymmetry)
      ; Use symmetry for continuous tiling
      xRrelativeTiledLocation = tileAspect - 2 * abs(xRrelativeTiledLocation - tileAspect/2)
      yRrelativeTiledLocation = tileAspect - 2 * abs(yRrelativeTiledLocation - 0.5)

    endif
   
    ; Transform back to relative centered
    relativeCenteredLocation = 2*(xRrelativeTiledLocation + flip(yRrelativeTiledLocation)) - relativeTileSize

    centeredLocation = relativeCenteredLocation * halfViewHeight

    ; Transform back from centered to view coordinates
    if (@useScreenCoordinates)
      #pixel = #center + exp(flip(#angle)) * centeredLocation
    else
      #pixel = @tileCenter + exp(flip(tileAngle)) * centeredLocation
    endif
  endif
 
default:
  title = "Tiles Deluxe"

  param viewMode
    caption = "View mode"
    default = 0
    enum = "One tile" "Tile grid" "Fixed grid"
    hint = "View mode specifies how the tiles are shown. One tile mode simply \
            shows one tile and clips outside areas. Tile grid shows a grid \
            of tiles aligned to image edges and the Number of tiles parameter \
            is used to specify the grid size. In the Fixed grid mode the \
            visible area of the tile grid can be adjusted using the location \
            tab."
  endparam

  complex param offset
    caption = "Offset amount"
    default = (0.0,0.0)
    hint = "Specifies the amount of offset. 0 means no offset, (0.5,0.5) offsets edges to screen center."
  endparam
 
  bool param useSymmetry
    caption = "Symmetric tiling"
    default = true
    hint = "Use symmetry (or mirroring) to achieve continuous tiling."
  endparam
 
  float param numTiles
    caption = "Number of tiles"
    default = 2
    enabled = @viewMode == "Tile grid"
    hint = "Specifies the number of times the tile is repeated in the Tile \
            grid mode."
  endparam

  bool param useImageAspect
    caption = "Use image aspect"
    default = false
    hint = "When checked, the image aspect ratio is used as the tile aspect \
            ratio. Otherwise, the Tile aspect parameter is used."
  endparam

  float param tileAspect
    caption = "Tile aspect ratio"
    default = 1
    enabled = @useImageAspect == false
    hint = "Specifies the tile aspect ratio."
  endparam

  bool param useScreenCoordinates
    caption = "Use screen coordinates"
    default = true
    hint = ""
  endparam

  complex param tileCenter
    caption = "Tile center"
    default = (0,0)
    enabled = @useScreenCoordinates == false
    hint = "Specifies the tile location center point."
  endparam

  float param tileMagnification
    caption = "Tile magnification"
    default = 1
    enabled = @useScreenCoordinates == false
    hint = "Specifies the tile location magnification."
  endparam

  float param tileAngle
    caption = "Tile angle"
    default = 0
    enabled = @useScreenCoordinates == false
    hint = "Specifies the tile location angle in degrees."
  endparam

jh.txt

Bill Smith

unread,
Feb 24, 2008, 5:58:27 AM2/24/08
to UFB...@googlegroups.com
Thanks Jayce
Bill

jh-tiles-deluxe {
; (c) 2007-2008 Jussi Härkönen
; This transform has been designed for easy creation and use of tiled images.
;
; 07-02-10 First version
; 07-02-23 Implemented View mode and screen coordinate parameters

Ron Barnett

unread,
Feb 24, 2008, 12:43:37 PM2/24/08
to UFB...@googlegroups.com
Jussi,

I believe I have a bug for you. When view mode is set to tile grid, the number of tiles parameter is available to be changed. When the view mode is set fixed grid the number of tiles parameter is greyed out, but if it is changed in the other view mode, the fixed grid view is changed when I switch back to it.

Ron

Jussi

unread,
Feb 25, 2008, 2:16:29 PM2/25/08
to UFBeta

Hi all,
and sorry for not participating the discussion before. I'm new to
google groups and thought I'd receive an email if anyone comments on
my post but I didn't.

Thanks, Ron, for the bug report. I changed the number of tiles
parameter behavior and renamed it to tile density. Now it can also be
used in fixed grid mode to adjust tile density. This is often
necessary in order to get the tiles appear in the desired size when
used with the Poles transform.

Attached below is the updated formula. You may need to manually add
the last { as the google text processor seems to hide it.

Regards,
Jussi


jh-tiles-deluxe {
; (c) 2007-2008 Jussi Härkönen
;
; This transform has been designed for easy creation and use of tiled
images.
;
; 07-02-10 First version
; 07-02-23 Implemented View mode and screen coordinate parameters
relativeCenteredLocation = @numTiles * #pixel
caption = "Tile density"
default = 2
enabled = @viewMode != "One tile"
hint = "Specifies the number of times the tile is repeated in the
Tile \
grid and Fixed grid view modes."

Jussi

unread,
Feb 25, 2008, 2:23:20 PM2/25/08
to UFBeta

I also uploaded the updated formula to the files section as
tilesdeluxe.uxf.

Regards,
Jussi

FractAlchemist

unread,
Feb 26, 2008, 8:51:56 AM2/26/08
to UFB...@googlegroups.com


On Mon, Feb 25, 2008 at 8:16 PM, Jussi <juhar...@gmail.com> wrote:


Hi all,
and sorry for not participating the discussion before. I'm new to
google groups and thought I'd receive an email if anyone comments on
my post but I didn't.


Hi Jussi, you can edit your preferences about email and more( from any group page.) In the right sidebar there is a list of links, one of them reads : "edit my membership" Evie
Reply all
Reply to author
Forward
0 new messages