[Back to MATH SWAG index] [Back to Main SWAG index] [Original]

    Program ThreePoints_TwoPoints;
    {

       I Really appreciate ya helping me With this 3 points on a
    circle problem. The only thing is that I still can't get it
    to work. I've tried the Program you gave me and it spits out
    the wrong answers. I don't know if there are parentheses in the
    wrong place or what. Maybe you can find the error.

       You'll see that I've inserted True coordinates For this test.

    Thank you once again...and please, when you get any more information
    on this problem...call me collect person to person or leave it on my
    BBS. I get the turbo pascal echo from a California BBS and that sure
    is long distance. Getting a good pascal Procedure For this is
    important to me because I am using it in a soon to be released math
    Program called Mr. Machinist! I've been racking my brain about this
    for 2 weeks now and I've even been dream'in about it!

    Your help is appreciated!!!

     +
    +AL+

    (716) 434-7823 Voice
    (716) 434-1448 BBS ... if none of these, then leave Program on TP echo.

    }

    Uses
      Crt;
    Const
      x1 =  4.0642982;
      y1 =  0.9080732;
      x2 =  1.6679862;
      y2 =  2.8485684;
      x3 =  4.0996421;
      y3 =  0.4589868;

    Var
      Selection : Integer;
    Procedure ThreePoints;
    Var
      Slope1,
      Slope2,
      Mid1x,
      Mid1y,
      Mid2x,
      Mid2y,
      Cx,
      Cy,
      Radius : Real;
    begin
      ClrScr;
      Writeln('3 points on a circle');
      Writeln('====================');
      Writeln;
      Writeln('X1 ->  4.0642982');
      Writeln('Y1 ->  0.9080732');
      Writeln;
      Writeln('X2 ->  1.6679862');
      Writeln('Y2 ->  2.8485684');
      Writeln('X3 ->  4.0996421');
      Writeln('Y3 ->  0.4589868');
      Writeln;
      Slope1 := (y2 - y1) / (x2 - x1);
      Slope2 := (y3 - y2) / (x3 - x2);
      Mid1x  := (x1 + x2) / 2;
      Mid1y  := (y1 + y2) / 2;
      Mid2x  := (x2 + x3) / 2;
      Mid2y  := (y2 + y3) / 2;
      Slope1 := -1 * (1 / Slope1);
      Slope2 := -1 * (1 / Slope2);
      Cx     := (Slope2 * x2 - y2 - Slope1 * x1 + y1) / (Slope1 - Slope2);
      Cy     := Slope1 * (Cx + x1) - y1;

      {
      I believe you missed out on using Cx and Cy in next line,
      Radius := sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
      I think it should be . . .
      }

      Radius := Sqrt(Sqr((x1 - Cx) + (y1 - Cy)));
      Writeln;
      Writeln('X center line (Program answer) is ', Cx : 4 : 4);
      Writeln('Y center line (Program answer) is ', Cy : 4 : 4);
      Writeln('The radius    (Program answer) is ', Radius : 4 : 4);
      Writeln;
      Writeln('True X center = 1.7500');
      Writeln('True Y center = 0.5000');
      Writeln('True Radius   = 2.3500');
      Writeln('Strike any key to continue . . .');
      ReadKey;
    end;

    Procedure Distance2Points;
    Var
      x1, y1,
      x2, y2,
      Distance : Real;
    begin
      ClrScr;
      Writeln('Distance between 2 points');
      Writeln('=========================');
      Writeln;
      Write('X1 -> ');
      Readln(x1);
      Write('Y1 -> ');
      Readln(y1);
      Writeln;
      Write('X2 -> ');
      Readln(x2);
      Write('Y2 -> ');
      Readln(y2);
      Writeln;
      Writeln;
      Distance := Sqrt((Sqr(x2 - x1)) + (Sqr(y2 - y1)));
      Writeln('Distance between point 1 and point 2 = ', Distance : 4 : 4);
      Writeln;
      Writeln('Strike any key to continue . . .');

      ReadKey;
    end;

    begin
      ClrScr;
      Writeln;
      Writeln;
      Writeln('1) Distance between 2 points');
      Writeln('2) 3 points on a circle test Program');
      Writeln('0) Quit');
      Writeln;
      Write('Choose a menu number: ');
      Readln(Selection);
        Case Selection of
          1 : Distance2Points;
          2 : ThreePoints;
        end;
      ClrScr;
    end.

[Back to MATH SWAG index] [Back to Main SWAG index] [Original]