From fe8dbcd2361ee220cbfa9e4723d717c2059f9554 Mon Sep 17 00:00:00 2001 From: Rosyid Haryadi Date: Thu, 21 Dec 2023 10:24:41 +0700 Subject: moving charge --- src/main.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 5948ce8..9f7579b 100644 --- a/src/main.c +++ b/src/main.c @@ -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) { -- cgit v1.2.3-70-g09d2