summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRosyid Haryadi <rosyid_haryadi@protonmail.com>2023-12-21 10:24:41 +0700
committerRosyid Haryadi <rosyid_haryadi@protonmail.com>2023-12-21 10:24:41 +0700
commitfe8dbcd2361ee220cbfa9e4723d717c2059f9554 (patch)
tree022f2c99197e1f4f5cb70d0031749b783052865c
parentf85e511f3a7bb974fdbfc289f6706187d2b023d9 (diff)
moving charge
-rw-r--r--src/main.c28
1 files changed, 19 insertions, 9 deletions
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) {