IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задачи по аналитической геометрии.
Liba
сообщение 27.10.2004 19:57
Сообщение #1


Гость






Помогите решить 2 задачки.....очень надо....

1)Есть 3 окружности разных диаметров с разными центрами.Нужной найти все точки пересечения окружностей.

2)На плоскости хаотично расположены точки(n) нужно посторить минимальный многоугольник(не треугольник).Вывести результат координат и кол-во точек многоугольника.

Заранее огромное спасибо!!!!!

P.S.Я вообще не понимаю как это надо делать.... :p2:
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 28.10.2004 18:00
Сообщение #2


Гость






sad.gif
Только что прогнал программу в Дельфи -

Код

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

Type
TPoint =
  Record
    x, y: Double;
  End;
TCircle =
  Record
    x, y, r: Double;
  End;

Const
Epsilon = 0.001;

n = 3;
Var
arrCircles: Array[1 .. n] Of TCircle;

Var
amount: Integer;
{ здесь хранятся координаты точек пересечения }
InterPoint: Array[1 .. 2*n] Of TPoint;


Function CircleIntersect( cr1, cr2: TCircle ): Integer;
Var
  p1, p2: TPoint;
  q, a, b, c, D: Double;
  Dist: Double;
Begin
  Dist := Sqrt( Sqr(cr2.x - cr1.x) +
                Sqr(cr2.y - cr1.y));

  cr2.x := cr2.x - cr1.x;
  cr2.y := cr2.y - cr1.y;

  CircleIntersect := 0;
  If (Abs(Dist) < Epsilon) or (Dist > cr1.r + cr2.r) or
     (Dist < Abs(cr1.r - cr2.r)) Then Exit;

  CircleIntersect := 1;
  If Abs(Dist - (cr1.r + cr2.r)) < Epsilon Then
    Begin
      p1.x := (cr2.x * cr1.r) / Dist;
      p1.y := (cr2.y * cr1.r) / Dist;

      p1.y := p1.y + cr1.y;
      p1.x := p1.x + cr1.x;

      Inc(Amount);
      InterPoint[Amount] := p1;
      Exit
    End;

  If cr2.x = 0 Then
    Begin
      p1.y := (Sqr(cr2.y) + Sqr(cr1.r) - Sqr(cr2.r)) /
             (2 * cr2.y);
      p1.x := Sqrt(Sqr(cr1.r) - Sqr(p1.y));
      p2.x := -p1.x;
      p2.y := p1.y;
    End
  Else
    Begin
      q := Sqr(cr1.r) - Sqr(cr2.r) + Sqr(cr2.x) + Sqr(cr2.y);
      a := 4 * (Sqr(cr2.y) + Sqr(cr2.x));
      b := (-4) * cr2.y * q;
      c := Sqr(q) - 4 * Sqr(cr1.r) * Sqr(cr2.x);
      D := Sqr(b) - 4 * a * c;

p1.y := ((-b + Sqrt(D))/(2*a));
p2.y := ((-b - Sqrt(D))/(2*a));
p1.x := ((Sqr(cr1.r) - Sqr(cr2.r) +
              Sqr(cr2.x) + Sqr(cr2.y) -
              2*cr2.y*p1.y) / (2*cr2.x));
p2.x := ((Sqr(cr1.r) - Sqr(cr2.r) +
              Sqr(cr2.x) + Sqr(cr2.y) -
              2*cr2.y*p2.y) / (2*cr2.x));
    End;

  p1.y := p1.y + cr1.y;
  p2.y := p2.y + cr1.y;
  p1.x := p1.x + cr1.x;
  p2.x := p2.x + cr1.x;

  Inc(Amount);
  InterPoint[Amount] := p1;

  Inc(Amount);
  InterPoint[Amount] := p2;
  CircleIntersect := 2
End;

Var
i, j: Integer;
Begin
For i := 1 To n Do
  Begin
    WriteLn( 'Окружность #', i );
    Write( 'X центра>' ); ReadLn(arrCircles[i].x);
    Write( 'Y центра>' ); ReadLn(arrCircles[i].y);
    Write( 'Радиус>' ); ReadLn(arrCircles[i].r);
  End;

Amount := 0;
For i := 1 To n Do
  For j := Succ(i) To n Do
    CircleIntersect(arrCircles[i], arrcircles[j]);


WriteLn( 'Найдено точек:', Amount );
For i := 1 To Amount Do
  WriteLn( 'точка #', i, ': x = ', interpoint[i].x:7:3,
                         '  y = ', interpoint[i].y:7:3 );
 ReadLn
End.


Вот в таком виде все отработало без проблем (на всякий случай, можно узнать, с какими координатами прогонялась программа?)
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Liba   Задачи по аналитической геометрии.   27.10.2004 19:57
Digitalator   задача1 Ты что, математику не знаешь??????? зада...   28.10.2004 2:04
xds   Предсказываю: имеется в виду выпуклый многоугольни...   28.10.2004 3:03
Altair   Между прочим, первую задачу, решит не каждый, если...   28.10.2004 6:50
volvo   Насколько я помню, в общем случае первая задача ре...   28.10.2004 12:25
Liba   Спасибо!!! А почему когда я ее запуска...   28.10.2004 17:36
volvo   :( Только что прогнал программу в Дельфи - pro...   28.10.2004 18:00
Liba   Совершенно точно ты предугодал....   30.10.2004 10:28
Guest   Неучто никто не знает как сделать 2 задачку???? :(   11.11.2004 22:59
Altair   А что значит минимальный? по какому параметру он ...   12.11.2004 7:23
Guest   да имеется в виду выпуклый многоугольник минималь...   12.11.2004 9:32
Guest   Ну кто-нибудь решите программку???пожалуйста :p2:   18.11.2004 23:57
Liba   Думаю я повтрарю задание....... ;) На плоскост...   19.11.2004 0:29
volvo   Liba Алгоритм описан здесь   19.11.2004 0:53
Liba   Алгоритм алгоритмом.........а написать программу я...   19.11.2004 7:15
Altair   АУ! Там есть блок схема! скачайте редактор...   19.11.2004 7:27
Liba   ОГРОМНЕЙШЕЕ СПАСИбО!!!!!!...   23.11.2004 21:19


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 17:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"