Geometry is the study of space in relation with distance, shape, size, and position of figures.
A circle is defined as a set of points equidistant from a central point, this distance is the circle's radius.
Trig Function Definitions
| Function | Definition |
| sin(α) | opposite / hypotenuse |
| cos(α) | adjacent / hypotenuse |
| tan(α) | opposite / adjacent |
Solving Right Triangles
| Know | Want | Compute |
| α, adjacent | opposite | = adjacent * tan(α) |
| hypotenuse | = adjacent / cos(α) | |
| α, opposite | adjacent | = opposite / tan(α) |
| hypotenuse | = opposite / sin(α) | |
| α, hypotenuse | adjacent | = hypotenuse * cos(α) |
| opposite | = hypotenuse * sin(α) |
Circle
Distance
(x1-x0)²+(y1-x0)²=r² If the circle is centred at the origin (0, 0), then the equation simplifies to x²+y²=r²
double
distance(Point2d a, Point2d b)
{
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
Angle
To find angle, in radians, between two points:
double
angle(Point2d a, Point2d b)
{
return atan2(b.y - a.y, b.x - a.x);
}
Position
To find a point on a circle:
Point2d
PtCircle2d(Point2d c, double r, double angle)
{
return Pt2d(
c.x + r * cos(angle),
c.y + r * sin(angle));
}
Parallel
The slope of the first line is m1=(y2−y1)/(x2−x1) and the slope of the second is m2=(y4−y3)/(x4−x3). The lines are parallel if and only if m1=m2.
Let'?'s say we are given the center point of the circle and its radius. We can now create a loop which iterates from Center.x-Radius to Center.x+Radius or maybe even downwards from Center.x+Radius to Center.x-Radius. Now we have one point on the radius which is the center of the circle and one point which we have the X to, which is located on the circumference. We can then calculate the Y position of this point using the distance formula as in:
Radius = Sqrt ((P1.x - P2.x) ^2 + (P1.y - P2.y) ^2)
cos(x) = 1 - (x^2/2!) + (x^4/4!)... (An even function) sin(x) = x -(x^3/3!) + (x^5/5!).... (An odd function) add both series together but keep all signs positive and you have e^x = 1 + x+ (x^2/2!) + (x^3/3!)..... So e^ipi + 1 =0
Tau is the Circle Constant.
Degree Minute Position to Decimal Position
d = M.m / 60 Decimal Degrees = Degrees + .d Example: To convert 124° 44.740, a DMS coordinate, to DD. 44.740(m.m) / 60 = 0.74566667 124(degrees) + 0.74566667(.d) = 124.0.74566667 And so 124° 44.740 is 124.0.74566667 in Decimal Degrees.
Fractals are endlessly complex patterns that are self-similar across different scales.
The Mandelbrot set is a kind of map of how multiplication and addition interact with each other in the complex numbers. It is one of the first iterative math functions calculated and displayed by computers by Benoit Mandelbrot in the 1970s.
mandelbrot.c
void
mandel(Uint32 *dst)
{
int width = 640, height = 480, max = 254;
int row, col;
for(row = 0; row < height; row++) {
for(col = 0; col < width; col++) {
double c_re = (col - width / 1.5) * 4.0 / width;
double c_im = (row - height / 2.0) * 4.0 / width;
double x = 0, y = 0;
Uint32 iteration = 0;
while(x * x + y * y <= 4 && iteration < max) {
double x_new = x * x - y * y + c_re;
y = 2 * x * y + c_im;
x = x_new;
iteration++;
}
putpixel(dst, col, row, (iteration % 2) * 0xFFFFFF);
}
}
}
Mandelbrot without fixed point
See the complete SDL2 source.
mandel(-2.0 * NORM_FACT, -1.2 * NORM_FACT, 0.7 * NORM_FACT, 1.2 * NORM_FACT);
typedef unsigned char Uint8;
typedef signed char Sint8;
typedef unsigned short Uint16;
typedef signed short Sint16;
#define NORM_BITS 8
#define NORM_FACT ((Sint16)1 << NORM_BITS)
Uint16 WIDTH = 600;
Uint16 HEIGHT = 400;
int
iterate(Uint16 real0, Uint16 imag0)
{
Uint8 i;
Sint16 realq, imagq, real = real0, imag = imag0;
for(i = 0; i < 255; i++) {
realq = (real * real) >> NORM_BITS;
imagq = (imag * imag) >> NORM_BITS;
if((realq + imagq) > (Sint16)4 * NORM_FACT)
break;
imag = ((real * imag) >> (NORM_BITS - 1)) + imag0;
real = realq - imagq + real0;
}
return i;
}
void
mandel(Sint16 realmin, Sint16 imagmin, Sint16 realmax, Sint16 imagmax)
{
Uint16 x, y,
deltareal = (realmax - realmin) / WIDTH,
deltaimag = (imagmax - imagmin) / HEIGHT,
real0 = realmin,
imag0;
for(x = 0; x < WIDTH; x++) {
imag0 = imagmax;
for(y = 0; y < HEIGHT; y++) {
putpixel(pixels, x, y, iterate(real0, imag0));
imag0 -= deltaimag;
}
real0 += deltareal;
}
}