Форум программистов, компьютерный форум CyberForum.ru

Правильный треугольник - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
St1nk3r
7 / 7 / 0
Регистрация: 12.01.2010
Сообщений: 10
12.01.2010, 22:00     Правильный треугольник #1
Какова должна быть длина стороны правильного треугольника a,чтобы из него можно было вырезать n кругов радиуса r?
Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2010, 22:00     Правильный треугольник
Посмотрите здесь:

C++ Правильный ли код?
C++ Не правильный указатель
Класс правильный треугольник C++
C++ Правильный ответ?
Правильный ответ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.01.2010, 22:47     Правильный треугольник #2
Этот алгоритм не строит треугольник минимальной площади, но по условию это не требуется.

Положить круги в пирамиду.
Например 1, 3, 6, 10, 15 кругов хорошо кладутся в пирамиду.
Если кругов например 5, то рассчитываем на пирамиду из 6, но одного круга нет.
Далее вокруг этой пирамиды легко строится правильный треугольник.
Осталось посчитать его сторону.

Имеется полная пирамида со стороной m кругов.
Очевидно, что n==(1+m)*m/2
Посчитаем сторону описанного треугольника.
В нижнем ряду лежит m кругов.
Между кругами имеется (m-1) промежутков длиной 2*r
a0=(m-1)*2*r

Угол правильного треугольника - 60, половина угла - 30.

Крайний круг лежит на нижней стороне описанного треугольника.
Нужно найти a1 - расстояние от точки касания крайнего круга и нижней стороны до угла треугольника.

Расмотрим маленький треугольник в углу.
sin(30)=1/2=r/2r.
Значит расстояние от угла описанного треугольника до центра ближайшего круга - 2r.

Иcкомое расстояние a1 - это один из катетов маленького треугольника
a1= sqrt(3*r^2)=r*sqrt(3)

Полная сторона: a=a1+a0+a1=r*sqrt(3)+(m-1)*2*r+r*sqrt(3) =>
a= 2*r*(sqrt(3)+(m-1))

Осталось определить m из n.

m - этот минимальное целое, такое что (1+m)*m/2 >= n
St1nk3r
7 / 7 / 0
Регистрация: 12.01.2010
Сообщений: 10
13.01.2010, 14:23  [ТС]     Правильный треугольник #3
спасибо!
попробую решить!

Добавлено через 53 минуты
4тото не выходит у меня ету формулу перевести в сишку(
помогите!

Добавлено через 14 часов 25 минут
4тото не выходит у меня ету формулу перевести в сишку(
помогите!
xxxwerusxxx
0 / 0 / 0
Регистрация: 21.12.2009
Сообщений: 7
06.04.2010, 09:22     Правильный треугольник #4
а можно это перевести в код delphi?)) или если есть на СИ выложите пожалуйста)
Yandex
Объявления
06.04.2010, 09:22     Правильный треугольник
Ответ Создать тему
Опции темы

Текущее время: 05:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru