diff options
author | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2023-12-21 10:24:41 +0700 |
---|---|---|
committer | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2023-12-21 10:24:41 +0700 |
commit | fe8dbcd2361ee220cbfa9e4723d717c2059f9554 (patch) | |
tree | 022f2c99197e1f4f5cb70d0031749b783052865c | |
parent | f85e511f3a7bb974fdbfc289f6706187d2b023d9 (diff) |
moving charge
-rw-r--r-- | src/main.c | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -21,8 +21,8 @@ typedef struct Line { } Line; typedef struct Object { - int posX; - int posY; + float posX; + float posY; float radius; Color color; float charge; @@ -65,11 +65,11 @@ int main(void) InitializeVectorField(&vectorField, colSize, rowSize); Object positiveCharge = { - .posX = config.ORIGIN_X, - .posY = config.ORIGIN_Y, + .posX = 50, + .posY = (float)config.ORIGIN_Y, .radius = 20, .color = RED, - .charge = 10 + .charge = 100 }; while (!WindowShouldClose()) @@ -93,10 +93,10 @@ void MemAllocFailed(char *source) { exit(42); } -float getRndAngle() { - float nMax = 360; - return (float)rand() / ((float)RAND_MAX / nMax); // NOLINT(cert-msc30-c, cert-msc50-cpp) -} +//float getRndAngle() { +// float nMax = 360; +// return (float)rand() / ((float)RAND_MAX / nMax); // NOLINT(cert-msc30-c, cert-msc50-cpp) +//} void InitializeVectorField(VectorField *vectorField, int colSize, int rowSize) { vectorField->lines = malloc(rowSize * sizeof(Line*)); @@ -120,6 +120,16 @@ void InitializeVectorField(VectorField *vectorField, int colSize, int rowSize) { void doUpdate(VectorField *vectorField, Object *object) { float dt = GetFrameTime(); + for (int i = 0; i < vectorField->rowSize; i++) { + for (int j = 0; j < vectorField->colSize; j++) { + Vector2 distanceVector = Vector2Subtract(vectorField->lines[i][j].start, (Vector2){object->posX, object->posY}); + float fieldStrength = object->charge / Vector2LengthSqr(distanceVector); + float vectorLineMag = fmaxf(10.0f, fieldStrength); + Vector2 directionVector = Vector2Scale(distanceVector, vectorLineMag / Vector2Length(distanceVector)); + vectorField->lines[i][j].end = Vector2Add(vectorField->lines[i][j].start, directionVector); + } + } + object->posX += dt * 20; } void doDrawing(VectorField *vectorField, int colSize, int rowSize, Object *object) { |