File:  [OS/2 SDKs] / pmsdk / samples / linefrac / lfxform.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 12:28:31 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: pmsdk-1989, HEAD
Microsoft OS/2 SDK PM 02-24-1989

/************************************************************************
*
*   lfxform.c -- Built-in similarity transforms.
*
*   Created by Microsoft Corporation, 1989
*
************************************************************************/

#define INCL_GPI
#include <os2.h>
#include "linefrac.h"




#define SQRT_2	1.4142136
#define SQRT_3	1.7320508




/************************************************************************
*
*   SharkTooth
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*
*				 *
*		     ===>      *   *
*			     *	     *
*   ***************	   *	       *
*
************************************************************************/

LINEFRAC SharkTooth[] =
{
    &SharkTooth[1],  PI / 6.0, (1.0/SQRT_3), FALSE,
    EOLIST,	    -PI / 3.0, (1.0/SQRT_3), FALSE
};




/************************************************************************
*
*   SawTooth
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*
*
*		     ===>      *
*			     *	 *
*   ***************	   *	   *	   *
*				     *	 *
*				       *
*
************************************************************************/

LINEFRAC SawTooth[] =
{
    &SawTooth[1],  PI / 4.0, (0.5 / SQRT_2), FALSE,
    &SawTooth[2], -PI / 2.0, (1.0 / SQRT_2), FALSE,
    EOLIST,	   PI / 2.0, (0.5 / SQRT_2), FALSE
};




/************************************************************************
*
*   KochIsland
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*   This is known as the Koch, or snowflake, transform.
*
*
*			          *
*		     ===>        * *
*			        *   *
*   ***************	   *****     *****
*
************************************************************************/

LINEFRAC Koch[] =
{
     &Koch[1],		 0.0, 1.0 / 3.0, FALSE,
     &Koch[2],	    PI / 3.0, 1.0 / 3.0, FALSE,
     &Koch[3], -2 * PI / 3.0, 1.0 / 3.0, FALSE,
     EOLIST,	    PI / 3.0, 1.0 / 3.0, FALSE
};




/************************************************************************
*
*   SpaceFiller
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*
*			   ***B******C***
*			   *		*
*			   A		D
*   **************   ===>  *		*
*
*
*   where sides A and D are reflections.
*
*
*
************************************************************************/

LINEFRAC SpaceFiller[] =
{
    &SpaceFiller[1],  PI / 2.0, 0.5, TRUE,
    &SpaceFiller[2], -PI / 2.0, 0.5, FALSE,
    &SpaceFiller[3],	   0.0, 0.5, FALSE,
    EOLIST,	     -PI / 2.0, 0.5, TRUE
};




/************************************************************************
*
*   StovePipe
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*   This is sometimes known as the stovepipe transform.
*
*
*			       ******
*			       *    *
*		     ===>      *    *
*			       *    *
*   **************	   *****    *****
*
************************************************************************/

LINEFRAC StovePipe[] =
{
    &StovePipe[1],	 0.0, 1.0 / 3.0, FALSE,
    &StovePipe[2],  PI / 2.0, 1.0 / 3.0, FALSE,
    &StovePipe[3], -PI / 2.0, 1.0 / 3.0, FALSE,
    &StovePipe[4], -PI / 2.0, 1.0 / 3.0, FALSE,
    EOLIST,	    PI / 2.0, 1.0 / 3.0, FALSE
};




/************************************************************************
*
*   SquareWave
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*
*			   ******
*			   *	*
*   **************   ===>  *	*    *
*				*    *
*				******
*
************************************************************************/

LINEFRAC SquareWave[] =
{
    &SquareWave[1],  PI / 2.0, 0.25, FALSE,
    &SquareWave[2], -PI / 2.0, 0.5,  FALSE,
    &SquareWave[3], -PI / 2.0, 0.5,  FALSE,
    &SquareWave[4],  PI / 2.0, 0.5,  FALSE,
    EOLIST,	     PI / 2.0, 0.25, FALSE
};




/************************************************************************
*
*   HourGlass
*
*   Set up the similarity transform for the following linefractal,
*   which looks roughly like:
*
*
*			      * * * * *
*				*   *
*				  *
*		     ===>	*   *
*			      *       *
*   **************	    *		*
*
************************************************************************/

#define HOURGLASSANGLE	0.463648
#define HOURGLASSLEN	0.83852549

LINEFRAC HourGlass[] =
{
    &HourGlass[1],     HOURGLASSANGLE, HOURGLASSLEN, FALSE,
    &HourGlass[2],  PI-HOURGLASSANGLE, 0.5,	     FALSE,
    EOLIST,	   -PI-HOURGLASSANGLE, HOURGLASSLEN, FALSE
};




/************************************************************************
*
*   aXform
*
*   This lists all the built-in transforms available, with their default
*   coordinate offsets and scale factors.
*
************************************************************************/

XFORMDATA aXform[] =
{
    SharkTooth,  0.200,  0.200,  0.60, 0.60, 3,
    SawTooth,	 0.125,  0.125,  0.75, 0.75, 3,
    Koch,	 0.125,  0.125,  0.75, 0.75, 3,
    SpaceFiller, 0.000, -0.500,  1.00, 1.00, 1,
    StovePipe,	 0.125,  0.125,  0.75, 0.75, 4,
    SquareWave,  0.200,  0.200,  0.60, 0.60, 5,
    HourGlass,	 0.250,  0.250,  0.50, 0.50, 2
};

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.