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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 23:27   #1
KnDmPetr
Пользователь
 
Регистрация: 02.03.2008
Сообщений: 20
Вопрос Интересная задача. Нужны идеи ее решения

Имеется окружность с радиусом R. Нужно описать вокруг нее многоугольник с количеством углов N так, чтобы окружность оказалась вписанной в многоугольник. Есть какие нибудь идеи, фрагменты кода, формулы как это сделать на Паскале?
KnDmPetr вне форума Ответить с цитированием
Старый 04.03.2008, 23:38   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

KnDmPetr, скажете тоже - "Интересная задача" Прямоугольные треугольники, синусы, косинусы....
B_N вне форума Ответить с цитированием
Старый 05.03.2008, 00:00   #3
pascal65536
Пользователь
 
Регистрация: 03.09.2007
Сообщений: 42
По умолчанию

А может есть уже задумки? Хотя бы без программирования. ИМХО здесь чистая геометрия.
pascal65536 вне форума Ответить с цитированием
Старый 05.03.2008, 09:18   #4
KnDmPetr
Пользователь
 
Регистрация: 02.03.2008
Сообщений: 20
По умолчанию

То что это связано с прямоугольным треугольником я это знаю. Я просто уже подзабыл математику. Как мне узнать координаты третьей точки треугольника в декартовой системе координат зная координаты точки прямого угла и еще одной точки? Вот в этом у меня загвоздка. Пожалуйста ответьте и не хайте меня, просто уже 12 лет как о математике и не вспоминал.
KnDmPetr вне форума Ответить с цитированием
Старый 05.03.2008, 09:22   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Найди школьный учебник по геометрии 7-11 кл. или почитай в интернете, иначе даже в готовой программе тебе будет трудно разобраться. Нельзя программировать то, чем не владеешь.
Держи код. Протестирован, работает.
Код:
program mnogoug;
uses crt,graph;
var i,x0,y0,R,R1,n,gd,gm:integer;
    x,y:array[1..20]of integer;
    a:real;
begin
clrscr;
write('R=');readln(R);
write('n=');readln(n);
InitGraph(gd,gm,'d\tp\bgi');//создаем путь к файлу
x0:=GetMaxX div 2;y0:=GetMaxY div 2; //в центр экрана
SetColor(4);
Circle(x0,y0,R);  //окружность
R1:=round(R/cos(pi/n)); //радиус многоугольника
for i:=1 to n do
  begin
    a:=i*2*pi/n;   //вершины многоугольника
    x[i]:=x0+round(R1*cos(a));
    y[i]:=y0+round(R1*sin(a));
  end;
MoveTo(x[n],y[n]);  //начало линии
SetColor(10);
for i:=1 to n do   
LineTo(x[i],y[i]);  //соединяем вершины
readln;
RestoreCrtMode;  //выход в текстовый режим
end.
puporev вне форума Ответить с цитированием
Старый 05.03.2008, 12:13   #6
KnDmPetr
Пользователь
 
Регистрация: 02.03.2008
Сообщений: 20
По умолчанию

Огромное спасибо за код!!! Правда это не вся задача которую мне необходимо решить, а только ее маленькая часть, но остальное я уже додумаю сам. Самое главное мне были нужны формулы.
А формула в коде:
R1:=round(R/cos(pi/n))
это радиус до точек углов многоугольника?
KnDmPetr вне форума Ответить с цитированием
Старый 05.03.2008, 13:28   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Да, это радиус описанной окружности, или расстояние от центра окружности до вершин правильного описанного многоугольника.
puporev вне форума Ответить с цитированием
Старый 05.03.2008, 14:13   #8
KnDmPetr
Пользователь
 
Регистрация: 02.03.2008
Сообщений: 20
По умолчанию

А что вычисляется здесь?
a:=i*2*pi/n;
KnDmPetr вне форума Ответить с цитированием
Старый 05.03.2008, 14:33   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Я же говорил, прочитайте учебник. Это центральный угол правильного многоугольника(в геометрии угол альфа, просто в шрифте нет этой буквы). Например в треугольнике их три и равны они 360/3=120, в шестиугольнике их шесть и равны они 360/6=60. Этот угол нам нужен для определения всех вершин, кроме первой, которую мы сами задали.
Индекс i используется как счетчик цикла, как бы передвигает невидимый курсор на следующую вершину.

Последний раз редактировалось puporev; 05.03.2008 в 14:37.
puporev вне форума Ответить с цитированием
Старый 05.03.2008, 16:09   #10
KnDmPetr
Пользователь
 
Регистрация: 02.03.2008
Сообщений: 20
По умолчанию

Уважаемый puporev, мне нужно чтобы ориентация многоугольника относительно своей оси (центра многоугольника) была задана случайным образом. Подскажите пожалуйста, что в вашем коде нужно подправить?
Извините за беспокойство.
KnDmPetr вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересная задача Ser Паскаль, Turbo Pascal, PascalABC.NET 3 27.02.2008 00:19
Поиск решения.(Задача) Lamborghini Microsoft Office Excel 1 19.02.2008 11:58
Интересная задача(MediaPlayer) PilGrim Компоненты Delphi 3 03.12.2007 08:46
интересная задача про DataTimePicker ГОСЕАН БД в Delphi 8 15.07.2007 16:37