This is StarCoord.m in view mode; [Download] [Up]
/* StarCoord.m CopyRight 1992 Steve Ludtke All Rights Reserved */
/* This object distributes the branches in all directions around a starting */
/* point in 3d. Has a tendency (intentional) to move up and down more than */
/* left and right. */
#import "StarCoord.h"
#import <stdio.h>
#import <math.h>
#import <libc.h>
@implementation StarCoord
/* get useful pointers */
- start: (Root *) Ptop: Pobject:(char *)path
{
object = Pobject;
return self;
}
/* set coordinates of branch */
- setCoord:(Branch *) branch
{
unsigned char *adr;
float c, t, m;
c = atan2(1.0, 2.0);
/* network address + port are split into 3, 2 byte words and used as */
/* x,y,z coordinates for the Root Branch */
if (branch->prev == NULL) {
adr = (unsigned char *)&branch->root->addr;
branch->x = adr[0] * 256 + adr[3];
branch->y = adr[1] * 256 + ((branch->root->port >> 8) & 255);
branch->z = adr[2] * 256 + (branch->root->port & 255);
return self;
}
/* if we are looking at a web link, point towards the destination in the */
/* x-y plane (reduces crossed wires). */
if (branch->link == NULL)
c = frand(0, M_PI * 2.0);
else
c = atan2(branch->link->y - branch->prev->y, branch->link->x - branch->prev->x);
/* for the first branch, go in a random direction. After that only go in */
/* the up or down half sphere. */
if (branch->level == 1)
t = frand(-M_PI / 2.0, M_PI / 2.0);
else if (branch->z - branch->root->branch.z > 0.0)
t = frand(0.0, M_PI / 2.0);
else
t = frand(-M_PI / 2.0, 0.0);
/* c==chi=azimuth t==theta=altitude in spherical coords */
m = 1.5 / (float)branch->level;
branch->x = branch->prev->x + cos(c) * cos(t) * m;
branch->y = branch->prev->y + sin(c) * cos(t) * m;
branch->z = branch->prev->z + sin(t) * m;
return self;
}
/* no prefs yet */
- preferences:sender
{
return self;
}
/* be helpful */
- (char *)help:window :browser
{
return ("StarCoord - Steve Ludtke May 1992\n\nThis is another simple example of a Coord object. This one splits the 6 bytes of address/port# into 2 16 bit words and uses the results as x,y,z coordinates for the center of the object. Branches spread both up and down from the center in a rather haphazard fashion. This is hardly an ideal distribution method, but it is a good, simple example.\n");
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.