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:
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 16)
Digitalator
сообщение 28.10.2004 2:04
Сообщение #2


Бывалый
***

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

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


задача1

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

задача2

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


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


N337
****

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

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


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

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


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


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

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

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


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

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

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

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.10.2004 12:25
Сообщение #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 - 28.10.2004 12:26
 К началу страницы 
+ Ответить 
Liba
сообщение 28.10.2004 17:36
Сообщение #6


Гость






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


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


Гость






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

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


Гость






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


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

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

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


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

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


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


Гость






да

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


Гость






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


Гость






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


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

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


Гость






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


Гость






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


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

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

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


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


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


Гость






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

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

 



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