# Talk:Boids simulation/C

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

## osx

I got this working on os x. Here's the makefile

<lang make>CFLAGS='-framework GLUT -framework OpenGL'

boid:</lang>

and here is the diff:

<lang diff>*** boid.orig.c 2013-01-12 13:38:00.000000000 -0500 --- boid.c 2013-01-12 13:42:50.000000000 -0500

• 1,9 ****
``` #include <stdio.h>
#include <stdlib.h>
#include <math.h>
```

! #include <GL/glut.h> ! #include <GL/gl.h> ! #include <GL/glu.h>

``` #include <sys/time.h>
#include <unistd.h>

```

--- 1,9 ----

``` #include <stdio.h>
#include <stdlib.h>
#include <math.h>
```

! #include <GLUT/glut.h> ! #include <OpenGL/gl.h> ! #include <OpenGL/glu.h>

``` #include <sys/time.h>
#include <unistd.h>

```
• 30,79 ****
``` // 3D vector stuff
typedef struct { flt x[3]; } vec;

```

! inline void vscale(vec *a, flt r) {

``` 	a->x[0] *= r;
a->x[1] *= r;
a->x[2] *= r;
}

```

! inline void vmuladd_to(vec *a, const vec *b, flt r) {

``` 	a->x[0] += r * b->x[0];
a->x[1] += r * b->x[1];
a->x[2] += r * b->x[2];
}

```

! inline void vadd_to(vec *a, const vec *b) {

``` 	a->x[0] += b->x[0];
a->x[1] += b->x[1];
a->x[2] += b->x[2];
}

```

! inline vec vadd(vec a, vec b) {

``` 	return (vec) {{	a.x[0] + b.x[0],
a.x[1] + b.x[1],
a.x[2] + b.x[2] }};
}

```

! inline vec vsub(vec a, vec b) {

``` 	return (vec) {{	a.x[0] - b.x[0],
a.x[1] - b.x[1],
a.x[2] - b.x[2] }};
}

```

! inline flt vlen2(vec a) {

``` 	return a.x[0]*a.x[0] + a.x[1]*a.x[1] + a.x[2]*a.x[2];
}

```

! inline flt vdist2(vec a, vec b) { return vlen2(vsub(a, b)); }

! inline vec vcross(vec a, vec b) {

``` 	return (vec) {{
a.x[1]*b.x[2] - a.x[2]*b.x[1],
a.x[2]*b.x[0] - a.x[0]*b.x[2],
a.x[0]*b.x[1] - a.x[1]*b.x[0] }};
}

```

! inline void vnormalize(vec *a) {

``` 	flt r = sqrt(a->x[0]*a->x[0] + a->x[1]*a->x[1] + a->x[2]*a->x[2]);
if (!r) return;
a->x[0] /= r;
```

--- 30,79 ----

``` // 3D vector stuff
typedef struct { flt x[3]; } vec;

```

! void vscale(vec *a, flt r) {

``` 	a->x[0] *= r;
a->x[1] *= r;
a->x[2] *= r;
}

```

! void vmuladd_to(vec *a, const vec *b, flt r) {

``` 	a->x[0] += r * b->x[0];
a->x[1] += r * b->x[1];
a->x[2] += r * b->x[2];
}

```

! void vadd_to(vec *a, const vec *b) {

``` 	a->x[0] += b->x[0];
a->x[1] += b->x[1];
a->x[2] += b->x[2];
}

```

! vec vadd(vec a, vec b) {

``` 	return (vec) {{	a.x[0] + b.x[0],
a.x[1] + b.x[1],
a.x[2] + b.x[2] }};
}

```

! vec vsub(vec a, vec b) {

``` 	return (vec) {{	a.x[0] - b.x[0],
a.x[1] - b.x[1],
a.x[2] - b.x[2] }};
}

```

! flt vlen2(vec a) {

``` 	return a.x[0]*a.x[0] + a.x[1]*a.x[1] + a.x[2]*a.x[2];
}

```

! flt vdist2(vec a, vec b) { return vlen2(vsub(a, b)); }

! vec vcross(vec a, vec b) {

``` 	return (vec) {{
a.x[1]*b.x[2] - a.x[2]*b.x[1],
a.x[2]*b.x[0] - a.x[0]*b.x[2],
a.x[0]*b.x[1] - a.x[1]*b.x[0] }};
}

```

! void vnormalize(vec *a) {

``` 	flt r = sqrt(a->x[0]*a->x[0] + a->x[1]*a->x[1] + a->x[2]*a->x[2]);
if (!r) return;
a->x[0] /= r;
```
• 112,122 ****
``` camera_t camera = { -PI/4, 0, 100, Template:0, 0, 0 };

```

! unsigned int hash_xy(int x, int y) { ! inline unsigned int ror(unsigned int a, int d) {

``` 		return (a<<d) | (a>>(32-d));
}

unsigned int h = 0x12345678, tmp;
tmp = x;
h += ror(h, 15) ^ ror(tmp, 5);
```

--- 112,122 ----

``` camera_t camera = { -PI/4, 0, 100, Template:0, 0, 0 };

```

! unsigned int ror(unsigned int a, int d) {

``` 		return (a<<d) | (a>>(32-d));
}

```

+ unsigned int hash_xy(int x, int y) {

``` 	unsigned int h = 0x12345678, tmp;
tmp = x;
h += ror(h, 15) ^ ror(tmp, 5);
```
• 518,523 ****

--- 518,525 ----

``` 	glutInitWindowSize(600, 400);

gwin = glutCreateWindow("Boids");
```

+ glutDisplayFunc(render); +

``` 	glutIgnoreKeyRepeat(1);
glutKeyboardFunc(keydown);</lang>
```