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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2010, 16:40   #1
EXeplor
 
Регистрация: 03.12.2009
Сообщений: 7
Печаль Нужна логика...

Такая задача. Пользователь вводит число (это число, количество сторон много угольника). Программа должна нарисовать много угольник с количеством углов / сторон которые ввел пользователь.
Нарисовать я могу все что надо.
Я понял что надо узнать угол всех сторон (многоугольник правильный) а потом как то по координатам рисовать line(). Помогите с задачей, просто формула мож есть какая или что то !
EXeplor вне форума Ответить с цитированием
Старый 08.05.2010, 17:14   #2
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

У заданной функции будет входными параметрами предыдущая точка (х, у) и угол наклона линии
Углы здесь будут, для удобства реализации, в радианах
1) Один угол многоугольника считается по формуле (n-2)*pi/n, где n - количество сторон
Я так понимаю, что длина стороны фиксирована
2) Решаем систему уравнений x*x+y*y=R*R и y=k*x+b, где k=tg(угла) b=y-k*x
3) Решение этой системы: xn=(2*k*b)/(k*k+1)-x
4) Высчитываем уn=k*x+b
5) Вот тебе координаты новой точки
6) Я не проверял, но могу предположить из того, что в конце концов мы должны будем попасть в 1-ю точку, то скорее всего мы должны приращивать угол на 2*pi/n
Каждый из нас звезданутый по-своему - это и делает нас личностями

Последний раз редактировалось Howaito Enjeru; 08.05.2010 в 17:45.
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 17:14   #3
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

У заданной функции будет входными параметрами предыдущая точка (х, у) и угол наклона линии
Углы здесь будут, для удобства реализации, в радианах
1) Один угол многоугольника считается по формуле (n-2)*pi/n, где n - количество сторон
Я так понимаю, что длина стороны фиксирована
2) Решаем систему уравнений x*x+y*y=R*R и y=k*x+b, где k=tg(угла) b=y-k*x
3) Решение этой системы: xn=(2*k*b)/(k*k+1)-x
4) Высчитываем уn=k*x+b
5) Вот тебе координаты новой точки
6) Я не проверял, но могу предположить из того, что в конце концов мы должны будем попасть в 1-ю точку, то скорее всего мы должны приращивать угол на 2*pi/n
Каждый из нас звезданутый по-своему - это и делает нас личностями
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 17:15   #4
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

Сорри, но я не знаю почему у меня отправилось два ответа
Каждый из нас звезданутый по-своему - это и делает нас личностями
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 17:33   #5
EXeplor
 
Регистрация: 03.12.2009
Сообщений: 7
По умолчанию

Howaito Enjeru, Ничего страшного, спосибо большое ! Сам бы долго думал !
EXeplor вне форума Ответить с цитированием
Старый 08.05.2010, 17:48   #6
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

Если не получится - пиши, подправим или логику поменяем
Каждый из нас звезданутый по-своему - это и делает нас личностями
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 18:06   #7
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

А можно чуть проще
yn=cos(угла)*R+y
xn=sin(угла)*R+x
а угол прирощается также
Каждый из нас звезданутый по-своему - это и делает нас личностями
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 19:04   #8
EXeplor
 
Регистрация: 03.12.2009
Сообщений: 7
По умолчанию

Что то не получается (
У меня постоянно один и тот же синус )) -0.46 и все...
С логикой у меня туго ))
Рисуем линию циклом:
Код:
gr=180/n    //gr - градус. Почему то тем путем ((n-2)*3.14/n) не получется узнать градус. А таким можно ? о0
R=oldx*oldx+oldy*oldy; //oldx - старое значение x, oldy - старое значение y;
for (i=1; i<=n; i++){    //n - количество сторон
      line(oldx,oldy,xn,yn); 
      yn=cos(gr)*sqrt(R)+oldy;
      xn=sin(gr)*sqrt(R)+oldx;
}
вот тут что то я запутался. В oldx и oldy мне надо записать старые координаты, но как сделать если я старые координаты сразу изменяю ?
И косинус любого числа почемуто получется один и тот же...

Последний раз редактировалось EXeplor; 08.05.2010 в 19:17.
EXeplor вне форума Ответить с цитированием
Старый 08.05.2010, 19:32   #9
Howaito Enjeru
 
Аватар для Howaito Enjeru
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

Такс.
1) Какой язык?
2) Градусы считались правильно
3) R-длина стороны - она не вычисляется, сорри, тогда забыл сказать
4) За частую в программировании углы измеряются не в градусах - а в радианах
5) И еще у тебя должно быть
Код:
gr+=(double)360/n \\ приращение к углу
в цикле
Каждый из нас звезданутый по-своему - это и делает нас личностями
Howaito Enjeru вне форума Ответить с цитированием
Старый 08.05.2010, 20:28   #10
EXeplor
 
Регистрация: 03.12.2009
Сообщений: 7
По умолчанию

Пишу С++
Можешь этот цикл написать, как он выглядить будет )
gr+=(double)360/n приращение к углу с каждой новой линией ???
ну да в принципе. Сейчас попробую чтото сделать )
EXeplor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЕГЭ (Логика) Xcopy Помощь студентам 6 07.02.2010 18:59
Математическая логика newum44 Помощь студентам 0 24.01.2010 10:08
Женская логика... Mr.Qwerty Свободное общение 23 28.07.2009 11:30
Бизнес - логика Lyubov1990 Microsoft Office Excel 3 09.06.2009 19:27
Логика монстра(ов) ChukCha Gamedev - cоздание игр: Unity, OpenGL, DirectX 15 19.08.2008 15:31