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

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

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

 
 Ответить  Открыть новую тему 
> Задачи по аналитической геометрии.
сообщение
Сообщение #1


Гость






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

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

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

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

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


Бывалый
***

Группа: Пользователи
Сообщений: 247
Пол: Мужской

Репутация: -  1  +


задача1

Ты что, математику не знаешь???????

задача2

Что есть "Минимальный многоугольник"? Минимальная площадь или периметр или еще как? И как он строится относительно точек - закрывает их всех?


--------------------
In byte we trust
ICQ World.ru
mail[dog]digitalator[dot]com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Предсказываю: имеется в виду выпуклый многоугольник минимальной площади, внутри которого лежат все точки множества... ;)

Сообщение отредактировано: xds -


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Между прочим, первую задачу, решит не каждый, если я добавлю такое условие:
дан рисунок BMP с 3 окружностями, найти точки пересечения.

Цитата
посторить минимальный многоугольник

ТОже не так все просто, конечно правила девушка не читала, итему надо было бы закрыть, но ... ладно, переименую ...

ЧТо значит минимальный многоугольник? Если по минимальной длинне его периметра, это одно, если по площади, это другое.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Насколько я помню, в общем случае первая задача решается так:

Код

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

Const
 Epsilon = 0.001;

 n = 3;
 { координаты заданы для тестирования }
 arrCircles: Array[1 .. n] Of TCircle =
   ((x:- 5; y:4; r:4),
    (x:- 6; y:4; r:1),
    (x:-10; y:8; r:3) );

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 )
End.


Можно еще добавить проверку на совпадающие точки ... :p2:

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Спасибо!!!
А почему когда я ее запускаю мне вылетает окно с ошибкой где пишется:runtime error 103 at 0000477C я программирую через делфи..... ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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.


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


Гость






Цитата(xds @ 28.10.04 3:03)
Предсказываю: имеется в виду выпуклый многоугольник минимальной площади, внутри которого лежат все точки множества... ;)

Совершенно точно ты предугодал....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Неучто никто не знает как сделать 2 задачку???? sad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
посторить минимальный многоугольник

А что значит минимальный?
по какому параметру он минимален?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






да

имеется в виду выпуклый многоугольник минимальной площади, внутри которого лежат все точки множества..
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Ну кто-нибудь решите программку???пожалуйста :p2:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Думаю я повтрарю задание....... ;)


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

Спасибо)))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Liba
Алгоритм описан здесь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Алгоритм алгоритмом.........а написать программу я так не могу((((
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


АУ!
Там есть блок схема!
скачайте редактор, в нем есть кнопка команда:
Импорт -> Паскаль.
И все, получите программу.
(толькоописать надо будет переменные)...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






ОГРОМНЕЙШЕЕ СПАСИбО!!!!!!!!!!!!!
вЫ МНЕ ЗДОРОВО ПОМОГЛИ!!!!!!!!!!!!!! :priva: :kiss4: :priva:
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 11.05.2024 15:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name