Помогите пожалуйста с задачей по Delphi
Найти длину наибольшей диагонали выпуклого многоугольника, если известны координаты его вершин
Найти длину наибольшей диагонали выпуклого многоугольника, если известны координаты его вершин
Пусть все координаты вершин многоугольника лежат в массиве в порядке их обхода по или против часовой стрелки:
type
tPoints = record
X, Y : Double;
end;
tArrPoints = array of tPoints;
var
Arr : tArrPoints;
Тогда можно просто перебрать все пары точек для нахождения максимального расстояния между точками…
Только нужно учесть, что рядом стоящие точки — это не диагонали, а рёбра. Следовательно нужно рассматривать точки с условием, что между ними есть хотя бы одна точка.
max1 := 0; max2 := 0; len := 0;
for n1 := 0 to Length(Arr) - 3 do
for n2 := n1+2 to Pred(Length(Arr)) do
if LengthOtr(n1, n2) > len then
begin
len := LengthOtr(n1, n2); max1 := n1; max2 := n2;
end;
Где функция LengthOtr:
function LengthOtr(n1, n2 : Integer) : Double;
begin
Result := Sqrt((Arr[n1].X-Arr[n2].X)*(Arr[n1].X-Arr[n2].X)+(Arr[n1].Y-Arr[n2].Y)*(Arr[n1].Y-Arr[n2].Y));
end;
Ну вот и всё!
В переменных max1 и max2 хранятся номера вершин в массиве, а в переменной len — длина наибольшей диагонали.
эх Максим Максим.. . пошли по... ээээ.. . самое главное не указал.. . в задаче то.... цена вопроса...
for i:=1 to {максимальное количество сторон} do
L:=sqrt(sqr(x[a]-x)-sqr(y[a]-y))$
for i:=1 to {максимальное количество сторон} then
if resultion
write resultion;
;-----L - длина отрезка
x[a],x,y[a],y- координаты начала и конца
resultion - сам догадаешься
Пробуй... но где-то так