Инструменты рисования
Математические данные
Данные о кривой отсутствуют
О поиске вписанных квадратов
Математические основы
Формула шнурка
Мы используем формулу шнурка (также известную как формула землемера) для расчета площади многоугольника, образованного кривой:
Где (xi, yi) - координаты i-й вершины многоугольника.
Реализация алгоритма
Поиск вписанного квадрата
Этот алгоритм использует метод Монте-Карло, пробуя случайные точки внутри кривой для поиска наибольшего вписанного квадрата.
function findInscribedSquare(curve) {
const minX = Math.min(...curve.map(p => p.x));
const maxX = Math.max(...curve.map(p => p.x));
const minY = Math.min(...curve.map(p => p.y));
const maxY = Math.max(...curve.map(p => p.y));
let bestSquare = [];
let maxSize = 0;
for (let i = 0; i < 1000; i++) {
const center = getRandomPointInside(curve);
let low = 0;
let high = Math.min(maxX - minX, maxY - minY);
while (high - low > 1) {
const mid = (low + high) / 2;
const square = [
{ x: center.x - mid / 2, y: center.y - mid / 2 },
{ x: center.x + mid / 2, y: center.y - mid / 2 },
{ x: center.x + mid / 2, y: center.y + mid / 2 },
{ x: center.x - mid / 2, y: center.y + mid / 2 },
];
if (square.every(p => isPointInside(p, curve))) {
if (mid > maxSize) {
maxSize = mid;
bestSquare = square;
}
low = mid;
} else {
high = mid;
}
}
}
return bestSquare;
}
Этот алгоритм использует метод Монте-Карло, пробуя случайные точки внутри кривой для поиска наибольшего вписанного квадрата.
Поиск описанного квадрата
Этот алгоритм находит ограничивающий прямоугольник кривой и создает квадрат, который полностью ее охватывает.
function findExtendedSquare(curve) {
const minX = Math.min(...curve.map(p => p.x));
const maxX = Math.max(...curve.map(p => p.x));
const minY = Math.min(...curve.map(p => p.y));
const maxY = Math.max(...curve.map(p => p.y));
const centerX = (minX + maxX) / 2;
const centerY = (minY + maxY) / 2;
const size = Math.max(maxX - minX, maxY - minY);
return [
{ x: centerX - size / 2, y: centerY - size / 2 },
{ x: centerX + size / 2, y: centerY - size / 2 },
{ x: centerX + size / 2, y: centerY + size / 2 },
{ x: centerX - size / 2, y: centerY + size / 2 },
];
}
Этот алгоритм находит ограничивающий прямоугольник кривой и создает квадрат, который полностью ее охватывает.
Введение
Добро пожаловать в поиск вписанных квадратов, интерактивный инструмент, исследующий увлекательный мир геометрии и математических гипотез.
Это приложение позволяет рисовать замкнутые кривые и находить вписанные в них квадраты, оживляя вековую математическую проблему.
Ключевые концепции
Замкнутые кривые
Замкнутая кривая - это непрерывная петля на плоскости, как круг или любая форма, которая заканчивается там, где начинается.
Вписанные квадраты
Вписанный квадрат - это квадрат, который идеально вписывается внутрь замкнутой кривой, причем все четыре угла касаются кривой.
Описанные квадраты
Описанный квадрат - это наименьший квадрат, который полностью охватывает замкнутую кривую.
Расчет площади
Площадь кривой и квадратов рассчитывается с использованием продвинутых геометрических алгоритмов.
Длина кривой
Общее расстояние вокруг кривой, измеряемое в килопикселях.
Как использовать
Выберите инструмент рисования на панели инструментов.
Нарисуйте замкнутую кривую на холсте.
Нажмите 'Найти вписанный квадрат', чтобы найти вписанный квадрат.
Нажмите 'Найти описанный квадрат', чтобы найти охватывающий квадрат.
Просмотрите математические данные для вашей кривой и квадратов.
Используйте кнопку 'Очистить', чтобы начать заново с новой кривой.
Экспериментируйте с различными формами и сравнивайте результаты!
Дальнейшее исследование
Проблема вписанного квадрата открывает множество путей для математического исследования:
Исследуйте, как часто идеально круглые кривые дают вписанные квадраты.
Изучите различные алгоритмы для более эффективного поиска вписанных квадратов.
Изучите связь между площадью кривой и ее вписанным квадратом.
Рассмотрите, как эта проблема может быть расширена до трех измерений с вписанными кубами.
Приятного исследования, и пусть ваше математическое любопытство никогда не угасает!
Создано Луисом, веб-разработчиком из Мексики
Посмотреть исходный код