|
|
1.1 root 1: /************************************************************************
2: *
3: * lfxform.c -- Built-in similarity transforms.
4: *
5: * Created by Microsoft Corporation, 1989
6: *
7: ************************************************************************/
8:
9: #define INCL_GPI
10: #include <os2.h>
11: #include "linefrac.h"
12:
13:
14:
15:
16: #define SQRT_2 1.4142136
17: #define SQRT_3 1.7320508
18:
19:
20:
21:
22: /************************************************************************
23: *
24: * SharkTooth
25: *
26: * Set up the similarity transform for the following linefractal,
27: * which looks roughly like:
28: *
29: *
30: * *
31: * ===> * *
32: * * *
33: * *************** * *
34: *
35: ************************************************************************/
36:
37: LINEFRAC SharkTooth[] =
38: {
39: &SharkTooth[1], PI / 6.0, (1.0/SQRT_3), FALSE,
40: EOLIST, -PI / 3.0, (1.0/SQRT_3), FALSE
41: };
42:
43:
44:
45:
46: /************************************************************************
47: *
48: * SawTooth
49: *
50: * Set up the similarity transform for the following linefractal,
51: * which looks roughly like:
52: *
53: *
54: *
55: * ===> *
56: * * *
57: * *************** * * *
58: * * *
59: * *
60: *
61: ************************************************************************/
62:
63: LINEFRAC SawTooth[] =
64: {
65: &SawTooth[1], PI / 4.0, (0.5 / SQRT_2), FALSE,
66: &SawTooth[2], -PI / 2.0, (1.0 / SQRT_2), FALSE,
67: EOLIST, PI / 2.0, (0.5 / SQRT_2), FALSE
68: };
69:
70:
71:
72:
73: /************************************************************************
74: *
75: * KochIsland
76: *
77: * Set up the similarity transform for the following linefractal,
78: * which looks roughly like:
79: *
80: * This is known as the Koch, or snowflake, transform.
81: *
82: *
83: * *
84: * ===> * *
85: * * *
86: * *************** ***** *****
87: *
88: ************************************************************************/
89:
90: LINEFRAC Koch[] =
91: {
92: &Koch[1], 0.0, 1.0 / 3.0, FALSE,
93: &Koch[2], PI / 3.0, 1.0 / 3.0, FALSE,
94: &Koch[3], -2 * PI / 3.0, 1.0 / 3.0, FALSE,
95: EOLIST, PI / 3.0, 1.0 / 3.0, FALSE
96: };
97:
98:
99:
100:
101: /************************************************************************
102: *
103: * SpaceFiller
104: *
105: * Set up the similarity transform for the following linefractal,
106: * which looks roughly like:
107: *
108: *
109: * ***B******C***
110: * * *
111: * A D
112: * ************** ===> * *
113: *
114: *
115: * where sides A and D are reflections.
116: *
117: *
118: *
119: ************************************************************************/
120:
121: LINEFRAC SpaceFiller[] =
122: {
123: &SpaceFiller[1], PI / 2.0, 0.5, TRUE,
124: &SpaceFiller[2], -PI / 2.0, 0.5, FALSE,
125: &SpaceFiller[3], 0.0, 0.5, FALSE,
126: EOLIST, -PI / 2.0, 0.5, TRUE
127: };
128:
129:
130:
131:
132: /************************************************************************
133: *
134: * StovePipe
135: *
136: * Set up the similarity transform for the following linefractal,
137: * which looks roughly like:
138: *
139: * This is sometimes known as the stovepipe transform.
140: *
141: *
142: * ******
143: * * *
144: * ===> * *
145: * * *
146: * ************** ***** *****
147: *
148: ************************************************************************/
149:
150: LINEFRAC StovePipe[] =
151: {
152: &StovePipe[1], 0.0, 1.0 / 3.0, FALSE,
153: &StovePipe[2], PI / 2.0, 1.0 / 3.0, FALSE,
154: &StovePipe[3], -PI / 2.0, 1.0 / 3.0, FALSE,
155: &StovePipe[4], -PI / 2.0, 1.0 / 3.0, FALSE,
156: EOLIST, PI / 2.0, 1.0 / 3.0, FALSE
157: };
158:
159:
160:
161:
162: /************************************************************************
163: *
164: * SquareWave
165: *
166: * Set up the similarity transform for the following linefractal,
167: * which looks roughly like:
168: *
169: *
170: * ******
171: * * *
172: * ************** ===> * * *
173: * * *
174: * ******
175: *
176: ************************************************************************/
177:
178: LINEFRAC SquareWave[] =
179: {
180: &SquareWave[1], PI / 2.0, 0.25, FALSE,
181: &SquareWave[2], -PI / 2.0, 0.5, FALSE,
182: &SquareWave[3], -PI / 2.0, 0.5, FALSE,
183: &SquareWave[4], PI / 2.0, 0.5, FALSE,
184: EOLIST, PI / 2.0, 0.25, FALSE
185: };
186:
187:
188:
189:
190: /************************************************************************
191: *
192: * HourGlass
193: *
194: * Set up the similarity transform for the following linefractal,
195: * which looks roughly like:
196: *
197: *
198: * * * * * *
199: * * *
200: * *
201: * ===> * *
202: * * *
203: * ************** * *
204: *
205: ************************************************************************/
206:
207: #define HOURGLASSANGLE 0.463648
208: #define HOURGLASSLEN 0.83852549
209:
210: LINEFRAC HourGlass[] =
211: {
212: &HourGlass[1], HOURGLASSANGLE, HOURGLASSLEN, FALSE,
213: &HourGlass[2], PI-HOURGLASSANGLE, 0.5, FALSE,
214: EOLIST, -PI-HOURGLASSANGLE, HOURGLASSLEN, FALSE
215: };
216:
217:
218:
219:
220: /************************************************************************
221: *
222: * aXform
223: *
224: * This lists all the built-in transforms available, with their default
225: * coordinate offsets and scale factors.
226: *
227: ************************************************************************/
228:
229: XFORMDATA aXform[] =
230: {
231: SharkTooth, 0.200, 0.200, 0.60, 0.60, 3,
232: SawTooth, 0.125, 0.125, 0.75, 0.75, 3,
233: Koch, 0.125, 0.125, 0.75, 0.75, 3,
234: SpaceFiller, 0.000, -0.500, 1.00, 1.00, 1,
235: StovePipe, 0.125, 0.125, 0.75, 0.75, 4,
236: SquareWave, 0.200, 0.200, 0.60, 0.60, 5,
237: HourGlass, 0.250, 0.250, 0.50, 0.50, 2
238: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.