Contributor: SWAG SUPPORT TEAM        

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.