Враховуючи лише випрямлення та компас, впишіть ромб усередині даного прямокутника, розділяючи дві протилежні точки.
Вхідні дані
Введення - це розміри прямокутника. У наведеному прикладі це було б 125, 50
. Ви можете брати вклад будь-яким зручним способом (як два цілі числа, список, рядки тощо).
Більший розмір буде 100 мінімумом, тоді як менший - 25 мінімумів. Обидві шапки по 200.
Вихідні дані
Виведенням буде зображення (відображене на екрані або збережене як файл) із зображенням
- Вхідний прямокутник
- Усі "робочі" лінії / кола
- Вписаний ромб
в різних кольорах. На зображенні вгорі прямокутник чорний, робочі лінії синього кольору, а ромб помаранчевий. Рядки повинні бути намальовані в порядку, показаному в списку (наприклад, ромб замінює робочі лінії та прямокутник).
Вихідне зображення повинно бути достатньо великим, щоб містити все. Наприклад, показані кола не можуть виходити за межі.
Метод
Метод, використаний у наведеному вище прикладі:
- Намалюйте коло, використовуючи нижній лівий кут як центр, а верхній правий як точку по периметру, даючи радіус, рівний діагоналі прямокутника.
- Зробіть те ж саме, але поміняючи точки по центру та по периметру.
- Накресліть лінію між перетинами двох кіл, подавши перпендикулярну бісектрису до діагоналі прямокутника.
- Скористайтеся перетинами нової лінії та прямокутника, щоб намалювати ромб.
Це працює тому, що внутрішні діагоналі ромба завжди перпендикулярно діляться один на одного. Я не включаю тут повного доказу цього.
Це не єдиний метод отримати свій ромб, і ви можете скористатися іншим, враховуючи, що ви пояснюєте, що робите. Я вважаю, що це, мабуть, найпростіше.
Правила
Можна малювати лише кола та лінії (а точніше - відрізки рядків). Коло визначається із точкою центра та точкою периметра. Рядок визначається будь-якими двома точками. Рядки не повинні бути заданої довжини, але вони повинні принаймні охоплювати визначальні точки (зверніть увагу на приклад зображення: лінія йде трохи далі від перетинів кола, але не до краю). Для кіл радіус від центру до обраної точки периметра вважається робочою лінією і повинен бути показаний.
Для растерізації ліній ви можете використовувати будь-який розпізнаний алгоритм (наприклад, Bresenham's) або покластися на будь-яку вбудовану вашу мову. Якщо ваш вихід має векторний характер, переконайтеся, що він відображається з роздільною здатністю, принаймні такою ж великою, як прямокутник введення в пікселях. Крім того, ви будете малювати на звичайному полотні, тому, будь ласка, придушіть будь-які позначки сітки або сторонні вихідні дані.
Жодного обману! Ви можете визначити розміщення точок / ліній / кіл лише за допомогою встановлених вами досі. Якщо ви не можете пояснити, як використовувати свої робочі лінії / кола, щоб показати, що це ромб, ви робите це неправильно.
Ви можете використовувати будь-яку пару протилежних точок, які вам потрібні, і прямокутник не потрібно малювати по осі, доки результат буде правильним.
Вхід завжди буде не квадратним прямокутником, тому не турбуйтеся про спеціальний кожух.
Нарешті, це стандартний код гольфу, тому виграє найменший розмір у байтах.