From 03d493f7b0b1dcb543820bb98fa432c76f301a80 Mon Sep 17 00:00:00 2001
From: bobarna <barnabas.borcsok@gmail.com>
Date: Sat, 4 Apr 2020 12:21:17 +0200
Subject: [PATCH] not working circle calculation

---
 sirius.cpp | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/sirius.cpp b/sirius.cpp
index 56e0cc7..76821d2 100644
--- a/sirius.cpp
+++ b/sirius.cpp
@@ -185,17 +185,15 @@ public:
     float r; //radius of the circle
 
     Circle(vec2 p1, vec2 p2, vec2 p3) {
-        float m1 = (p2.y - p1.y) / (p2.x - p1.x);
-        float m2 = (p3.y - p2.y) / (p3.x - p2.x);
+        vec2 n12 = p2 - p1; //normal vector for perpendicular bisector of p1 and p2
+        float f12 = dot(n12,(p2+p1)/2);
 
-        float mf1 = -1 / m1;
-        float mf2 = -1 / m2;
+        vec2 n23 = p3 - p2; //normal vector for perpendicular bisector of p1 and p2
+        float f23 = dot(n23, (p2+p3)/2);
 
-        float cf1 = (p2.x * p2.x + p2.y * p2.y - p1.x * p1.x - p1.y * p1.y) / (2 * (p2.y - p1.y));
-        float cf2 = (p3.x * p3.x + p3.y * p3.y - p2.x * p2.x - p2.y * p2.y) / (2 * (p3.y - p2.y));
-
-        float cx = (cf2 - cf1) / (mf1 - mf2);
-        float cy = (mf1 * cf2 - mf2 * cf1) / (mf1 - mf2);
+        //coordinates for the circle's center
+        float cx = (f12*n23.y - f23*n12.y) / (n12.x*n23.y - n12.y*n23.x);
+        float cy = (f12/n12.y) - (n12.x/n12.y) * (f12*n23.y - n12.y*f23)/(n12.x*n23.y - n12.y*n23.x);
 
         printf("%f %f\n", cx, cy);
         c = vec2(cx, cy);
@@ -227,7 +225,7 @@ public:
         printf("%d\n", n);
         if (n == 2) generateLineSegment(points[0], points[1]);
         if (n == 3) generateLineSegment(points[1], points[2]);
-//    if(n == 3) circles.emplace_back(Circle(p, points[1].p, points[1].inversion()));
+        if (n == 3) generateLineSegment(points[2], points[0]);
     }
 
     void generateLineSegment(Point p1, Point p2) {
@@ -297,7 +295,7 @@ public:
         triangles[currTriangle].addPoint(p);
         currPoints++;
 
-        if (currPoints == 3) currTriangle++, triangles.emplace_back(SiriusTriangle()), currPoints = 0;
+        if (currPoints == 3) currTriangle++, currPoints = 0;
     }
 
     void draw() {
@@ -307,7 +305,6 @@ public:
 };
 
 BaseCircle baseCircle = BaseCircle::generate();
-
 SiriusTriangleManager siriusTriangleManager = SiriusTriangleManager();
 
 // Initialization, create an OpenGL context
@@ -315,6 +312,9 @@ void onInitialization() {
     glViewport(0, 0, windowWidth, windowHeight);
 
     baseCircle.init();
+    siriusTriangleManager.addPoint(vec2(-0.6, 0.4));
+    siriusTriangleManager.addPoint(vec2(-0.8, 0.2));
+    siriusTriangleManager.addPoint(vec2(-0.2, -0.6));
 
     // create program for the GPU
     gpuProgram.create(vertexSource, fragmentSource, "outColor");
@@ -382,10 +382,10 @@ void onMouse(int button, int state, int pX,
             break;
     }
 
-    siriusTriangleManager.addPoint(vec2(-.8f, -.4f));
-    siriusTriangleManager.addPoint(vec2(-.2f, -.6f));
-    siriusTriangleManager.addPoint(vec2(-.4f, .4f));
-    siriusTriangleManager.draw();
+//    siriusTriangleManager.addPoint(vec2(-.8f, -.4f));
+//    siriusTriangleManager.addPoint(vec2(-.2f, -.6f));
+//    siriusTriangleManager.addPoint(vec2(-.4f, .4f));
+//    siriusTriangleManager.draw();
 
     if (state == GLUT_DOWN && button == GLUT_LEFT_BUTTON) {
         siriusTriangleManager.addPoint(vec2(cX, cY));
-- 
GitLab