Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2009, 22:59   #1
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
По умолчанию центр окружности и радиус (всё это на плоскости) Pascal

последняя задачка, уверен что решить не смогу, большая просьба помочь..

Требования, предъявляемые к заданию:
1. предусмотреть меню:
 ввод данных с клавиатуры;
 ввод данных из файла;
 выход.
2. выполнить с применением подпрограмм пользователя;
3. предусмотреть отображение координатных осей;
4. выделить цветом результат решения поставленной задачи.

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

Последний раз редактировалось tipilat; 07.07.2009 в 23:11.
tipilat вне форума Ответить с цитированием
Старый 07.07.2009, 23:07   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

http://programmersforum.ru/showthread.php?t=38139
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 07.07.2009, 23:18   #3
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
По умолчанию

Sazary она у меня не работает, в этой части ошибку выдает[
CODE]uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;[/CODE]

я реально в шоке мы такого вообще не делали, а в практике такое присутствует..
есть вопрос, код удовлетворяет моим требованиям к заданию?



вот она вся
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    P : array [1..3] of TPoint;
    CPoint : integer;
    Delta : TPoint;
    X0 : TPoint;
    R : integer;
    procedure ReCalcCircle;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
   P[1].X := 100; P[1].Y := 100;
   P[2].X := 150; P[2].Y := 100;
   P[3].X := 125; P[3].Y := 200;
   ReCalcCircle;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   if R > 0 then begin
      Canvas.Brush.Color := clBtnFace;
      Canvas.Pen.Color   := clBlue;
      Canvas.Ellipse(X0.X-R, X0.Y-R, X0.X+R, X0.Y+R);
   end;

   Canvas.Brush.Color := clGreen;
   Canvas.FillRect(rect(P[1].X-3, P[1].Y-3, P[1].X+3, P[1].Y+3));
   Canvas.FillRect(rect(P[2].X-3, P[2].Y-3, P[2].X+3, P[2].Y+3));
   Canvas.FillRect(rect(P[3].X-3, P[3].Y-3, P[3].X+3, P[3].Y+3));
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if      (X >= P[1].X-5) and (Y >= P[1].Y-5) and (X <= P[1].X+5) and (Y <= P[1].Y+5) then CPoint := 1
   else if (X >= P[2].X-5) and (Y >= P[2].Y-5) and (X <= P[2].X+5) and (Y <= P[2].Y+5) then CPoint := 2
   else if (X >= P[3].X-5) and (Y >= P[3].Y-5) and (X <= P[3].X+5) and (Y <= P[3].Y+5) then CPoint := 3
   else CPoint := -1;
   Delta.Y := P[CPoint].X - X;
   Delta.Y := P[CPoint].Y - Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if CPoint = -1 then exit;
   P[CPoint].X := X + Delta.X;
   P[CPoint].Y := Y + Delta.Y;
   ReCalcCircle;
   refresh;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   CPoint := -1;
end;

procedure TForm1.ReCalcCircle;
var A, B, x, y:double;
    k0, k1, k2, m0, m1, m2:double;
begin
   R := -1;
   k0 := sqr(P[1].X)-sqr(P[2].X) + sqr(P[1].Y)-sqr(P[2].Y);
   k1 := 2*(P[1].Y-P[2].Y);
   k2 := 2*(P[1].X-P[2].X);
   m0 := sqr(P[1].X)-sqr(P[3].X) + sqr(P[1].Y)-sqr(P[3].Y);
   m1 := 2*(P[1].Y-P[3].Y);
   m2 := 2*(P[1].X-P[3].X);
   A := (k2*m0 - k0*m2);
   B := (k2*m1 - k1*m2);
   if B = 0 then exit;
   y := A / B;
   X0.Y := trunc(y);
   if abs(m2) > 0.01 then x := (m0 - y * m1) / m2
   else
      if abs(k2) > 0.01 then x := (k0 - y * k1) / k2
      else exit;
   X0.X := trunc(x);

   R := trunc(sqrt(sqr(P[1].X-x) + sqr(P[1].Y-y)))
end;

end.

Последний раз редактировалось tipilat; 07.07.2009 в 23:55.
tipilat вне форума Ответить с цитированием
Старый 08.07.2009, 00:32   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от tipilat
она у меня не работает, в этой части ошибку выдает
Не заметил, что вам на паскале надо (это на Делфи).

Давайте по порядку: что конкретно у вас вызывает трудности?

Идеи по самой задаче вы можете взять из вышеуказанной темы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.07.2009, 22:19   #5
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
По умолчанию

мне её на паскале надо сделать, но я рельно не смогу, а время поджимает..
Народ помогите!!! Спасите студента)..
tipilat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высчитать радиус окружности Anyken Фриланс 4 25.06.2009 10:30
Pascal - Высчитать радиус окружности Anyken Помощь студентам 8 24.06.2009 17:53
Дивижение окружности по окружности Irina8340 Помощь студентам 10 13.05.2009 20:25
Определить радиус и центр окружности Verochka Помощь студентам 2 19.11.2008 15:47
Определить радиус и центр окружности на которой лежит наибольшее число точек. Zoratul Помощь студентам 2 11.01.2008 16:00