Задача. Какого наибольшего размера прямоугольник можно вырезать из круга диаметра [latex]d[/latex], если известно, что длины его сторон образуют золотую пропорцию.
Входные данные:
Единственное число — диаметр окружности.
Выходные данные:
Два числа — длины сторон прямоугольника.
Тесты.
№ | Входные данные | Выходные данные | |
[latex]d[/latex] | [latex]a[/latex] | [latex]b[/latex] | |
1 | 0 | 0 | 0 |
2 | 1 | 0.850651 | 0.525731 |
3 | 2 | 1.7013 | 1.05146 |
4 | 21 | 17.8638 | 11.0404 |
5 | 0.32 | 0.272208 | 0.168234 |
6 | 1.7 | 1.44611 | 0.893743 |
7 | 134 | 113.981 | 70.448 |
Код программы на C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <cmath> using namespace std; int main() { double a, b, f, d; cin >> d; f = (sqrt(5) + 1) / 2; b = d / sqrt (1 + f * f); a = b * f; cout << a << ' ' << b; return 0; } |
Код программы на Java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.*; import java.math.*; class Main { public static void main (String[] args) { Scanner in = new Scanner(System.in); double f = (Math.sqrt(5)+1)/2; double d = in.nextDouble(); double b = d / Math.sqrt(1 + f * f); double a = b * f; System.out.print(a + " " + b); } } |
Решение.
Прямоугольник будет иметь наибольший размер в случае, когда его вершины лежат на окружности. Тогда, очевидно, диаметр окружности будет диагональю данного прямоугольника. Согласно условию, длины его сторон образуют золотую пропорцию. Это означает, что [latex]\frac { a }{ b } =\phi [/latex], где [latex]a[/latex] — длина большей стороны прямоугольника, [latex]b[/latex] — длина его меньшей стороны, а [latex]\phi=\frac { 1+\sqrt { 5 } }{ 2 } [/latex]. Отсюда [latex]a=b\cdot \phi[/latex]. По теореме Пифагора, [latex]{ a }^{ 2 }+{ b }^{ 2 }={ d }^{ 2 }[/latex]. Путём подстановки из предыдущего выражения и простых алгебраических преобразований получим формулу для вычисления длины меньшей стороны: [latex]b=d\cdot \sqrt { \frac { 1 }{ { \phi }^{ 2 }+1 } } [/latex].
Сначала для удобства находим значение [latex]\phi[/latex], затем — по указанным формулам длины сторон прямоугольника.
Ссылка на код на ideone.com: здесь (C++) и здесь (Java).
Очень хорошо получилось для первой работы. Конечно, нужно немного подправить.
— У Вас описка в формуле теоремы Пифагора.
— SVG чертёж лучше делать в текстовом редакторе, предварительно рассчитав на листике бумаги координаты всех пяти точек. Это всего десять чисел. После этого останется записать команды рисования одной окружности и пяти отрезков (или одной ломанной). Тогда и код рисунка будет в сотню раз короче, и не будет таких странностей, когда диагональ не попадает в вершину, а вершина не попадает на окружность. Да! Буквы нужно делать в курсиве (наклонными), тогда они будут выглядеть, так как в тексте. Ну и заодно уж откорректируйте размер, чтобы не было большого пустого поля снизу.
Ваши замечания были учтены.
Молодец! Очень хорошо. Но пока не идеально.
— Вынесите квадрат из под корня в формуле, которую вывели.
— Уберите точку в названии.
— __trashed-2 не самое удачное название для постоянной ссылки. Т.е. можно так и оставить, но лучше исправить.
— окружность вплотную примыкает к границам рисунка — стоит сдвинуть всё на десяток пикселей вниз и вправо. Т.е. можно так и оставить, но лучше исправить.
Спасибо. Всё сделано.
Хорошо. Молодец! Работа зачтена.
Только, пожалуйста, извлеките корень из единицы (т.е. упростите дальше свою формулу), а то как-то странновато выглядит.