aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
blob: 53b4edff75c0cf51f04d00040345dbb63178d78a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <math.h>
#include "display.h"

#define W 1600
#define H 900
#define FPS 60
#define RFPS 1/600
#define PI 3.141592654

typedef struct{
    float x;
    float y;
} vec;


const float s = (PI/180 * 10); // rad
const int l = 250; // mm
const int m = 25;  // kg
// const vec g = {0.0f, -9.81f}; // m/s^2
const float g = -9.81f;

// vec p;
// vec v;
// vec a;
float t;
float v;
float a;

// vec rotate_grav(float angle, int d) // d = 0-clock, 1-anti
// {
//     // vec rg = {0, g.y*m*sinf(angle)};
//     vec rg = {0, g.y};
//     if(d == 0) {
//         rg.x = (rg.y*sinf(angle));
//         rg.y = -(rg.y*cosf(angle));
//     } else if(d == 1) {
//         rg.x = -(rg.y*sinf(angle));
//         rg.y = (rg.y*cosf(angle));
//     }

//     printf("grav transform: %f %f %f\n", rg.x, rg.y, sqrt((rg.x*rg.x) + (rg.y*rg.y)));
//     return rg;
// }

void update()
{

    // float sinamp = p.x / l;
    // vec rg = rotate_grav((PI/2) - asinf(sinamp), (p.x > 0) ? 0 : 1);

    // printf("amp: %f\n", asinf(sinamp)*180/PI);
    // printf("lenght: %f\n", sqrt((p.x*p.x) + (p.y*p.y)));

    // p.x = sinf(t) * l;
    // p.y = cosf(t) * l;

    // a.x += rg.x;
    // a.y += rg.y;
    // v.x += a.x * RFPS;
    // v.y += a.y * RFPS;
    // p.x += v.x * RFPS;
    // p.y += v.y * RFPS;

    // dspl_draw_line(p.x, p.y, v.x + p.x, v.y + p.y, 0);
    // dspl_draw_line(p.x, p.y, a.x + p.x, a.y + p.y, 1);
    // dspl_draw_line(p.x, p.y, 0, 0, 0);
    // dspl_draw_circle(p.x, p.y, 5);

    a += g * cosf(t) * m;
    printf("%f %f\n", sinf(t), a);
    v += a * RFPS;
    t += v * RFPS;


    int px = sinf(t) * l;
    int py = cosf(t) * l;
    dspl_draw_line(px, py, 0, 0, 0);
    dspl_draw_circle(px, py, 5);

}

int main(void)
{
    // p.x = sinf(t) * l;
    // p.y = cosf(t) * l;
    // v.x = 0; v.y = 0;
    // a.x = 0; a.y = 0;

    t = s;
    v = 0;
    a = 0;

    dspl_createinfo info = {0};
    info.width = W;
    info.height = H;
    info.name = "Pendulum";
    info.fps = FPS;
    info.update_func = &update;

    dspl_create(info);
    dspl_start();
    dspl_destroy();
    return 0;
}