milan62
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору У меня такая задача " Даны два множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы круг, ограниченный окружностью, проходящей через эти три точки, содержал все точки второго множества и имел минимальную площадь " Я так делал :найти центр окужности,проходящей через три точки 1-го множеста, потом определение лежит и точка внутри окружности сводится к сравнению радиуса окружности с расстоянием от точки до центра... но не получил резул. Так я сделал Function Rr(A, B, C : TPoint): TPoint;{найти центр окужности,проходящей через три точки} Var M : Array[1..2,1..3] Of Extended; D, Dx, Dy : Extended; Begin M[1, 1] := 2 * (A.X - B.X); M[1, 2] := 2 * (A.Y - B.Y); M[1, 3] := Sqr(A.X) +Sqr(A.Y) - (Sqr(B.X) + Sqr(B.Y)); M[2, 1] := 2 * (B.X - C.X); M[2, 2] := 2 * (B.Y - C.Y); M[2, 3] := Sqr(B.X) +Sqr(B.Y) - (Sqr(C.X) + Sqr(C.Y)); D := M[1, 1] * M[2, 2] - M[2, 1] * M[1, 2]; Dx := M[1, 3] * M[2, 2] - M[2, 3] * M[1, 2]; Dy := M[1, 1] * M[2, 3] - M[2, 1] * M[1, 3]; If D <> 0 Then Begin Rr.X := Dx/D; Rr.Y := Dy/D; End Else Begin Rr.X := 0; . Rr.Y := 0; End; **************** Function Line(A,B:TPoint):Double;{//Длина отрезка,проход. через 2 точки} begin line:=Sqrt(sqr(A.x-B.x)+sqr(A.y-B.y)); end; *********************** Function Inside(A,B,C,M:TPoint):Boolean;{//Проверить окр. содержит ли 2-ое множество: сравнение радиуса окружности с расстоянием от точки до центра, {A,B,C}= 1-ое множество,{M}= 2-ое множество} begin If ((Abs(line(Rr(A,B,C),A)))> (abs(line(Rr(A,B,C),M)))) or ((Abs(line(Rr(A,B,C),A)))= (abs(line(Rr(A,B,C),M)))) then Inside:= true else Inside:=False; end; ************* Где ошибка, или у вас есть другой способ лучше, помогите!Мне срочно нужно сдавать |