LINUX.ORG.RU
ФорумTalks

[занимательная геометрия] задача


0

2

Простая и в то же время занимательная задача. Не могу не поделиться.

Найти все шесть вариантов расположения четырех точек на плоскости так, чтобы любое из расстояний между ними имело лишь два возможных позитивных значения.

Пояснение: Одна из таких возможностей - точки по углам квадрата. Расстояние от любой из точек до любой другой равно либо _a_ (длина стороны), либо _b_ (длина диагонали).

★★☆☆☆

Последнее исправление: dikiy (всего исправлений: 3)
Ответ на: комментарий от JohannPC

позитивных. Точки не должны совпадать

PS откорректировал

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от alikhantara

да. Это вторая возможность. Осталось еще 4-е )

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от Lorchanko

>Три точки на равном расстоянии в линию, 4-я на таком же расстоянии от центральной точки.

Ты забыл учесть расстояние между двумя точками на концах отрезка.

dikiy ★★☆☆☆
() автор топика

сложить два равносторонних треугольника

bender ★★★★★
()

Ромб, образованный двумя правильными треугольниками

unC0Rr ★★★★★
()

Ещё можно в правильном треугольнике расположить точку на срединном перпендикуляре на расстоянии, равном ребру треугольника

unC0Rr ★★★★★
()

Точки в углах параллелограмма, рёбра которого равны меньшему основанию, а диагонали - большему.

alfix
()

Систему уравнений составить нужно

elverion
()
Ответ на: комментарий от alfix

Полотенчик пыхнул и ушёл. Нарисовать пробовал?

unC0Rr ★★★★★
()

Три точки в равностороннем треугольнике, четвёртая на прямой, на которой лежит одна из медиан, но расположенная не в треугольнике на расстоянии равном стороне треугольника.

В общем нарисовать треугольник равносторонний со стороной a и вверх от верхней точки ещё на a четвёртую точку.

Legioner ★★★★★
()
Ответ на: комментарий от alfix

>Точки в углах параллелограмма, рёбра которого равны меньшему основанию, а диагонали - большему.

параллелограмм, в котором диагонали равны между собой называется прямоугольником :) А прямоугольник, удовлетворяющий условию задачи называется квадратом, который уже был )

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от alfix

>Ага. Я не то написал, имелась ввиду трапеция.

Горячо уже. Осталось ее найти.

dikiy ★★☆☆☆
() автор топика

Исправленный вариант:

Точки в углах равнобедренной трапеции, рёбра которой равны меньшему основанию, а диагонали - большему.

alfix
()

Задачу лучше решать не эвристически, а перебором. Строим симметричную матрицу связности, заполняем её 0(длинная сторона) и 1(короткая сторона) всеми возможными способами с точностью до перенумерации точек.

Заодно будет видно, что вариантов ровно шесть (если это действительно так).

Задача сводится к определению числа классов эквивалентности бинарных симметричных матриц 4x4 с нулями на диагоналях, порождаемых операциями одновременной перестановки строк и столбцов.

mclaudt
()
Ответ на: комментарий от mclaudt

>адачу лучше решать не эвристически, а перебором. Строим симметричную матрицу связности, заполняем её 0(длинная сторона) и 1(короткая сторона) всеми возможными способами с точностью до перенумерации точек.

спасибо. Я как раз задумывался над тем, как доказать, что вариантов именно шесть. Надо попробовать.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от mclaudt

>Задачу лучше решать не эвристически, а перебором.

А так да. Доказать ты сможешь, что вариантов шесть. А вот начертить их конкретно из матрицы нельзя. Разве что на каждое решение систему уравнений решать.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

>>Разве что на каждое решение систему уравнений решать.

Ну или мысленно кинуть на плоскость металлическую связку на шарнирах, соответствующую матрице

mclaudt
()
Ответ на: комментарий от dikiy

1.2566370614359172 в радианах. Пример трапеции: (-1,000000, 0,000000) (0,000000, 0,000000) (0,309017, 0,951057) (-1,309017, 0,951057)

Решено правда численно с определённой погрешностью. Аналитически лень )

Legioner ★★★★★
()
Ответ на: комментарий от mclaudt

>>Разве что на каждое решение систему уравнений решать.

Ну или мысленно кинуть на плоскость металлическую связку на шарнирах, соответствующую матрице

Так и представил себе старшеклассника: сидящего дома и увлеченно строит какую-то херню из жвачки и обломанных спичек.

Подходит мама и спрашивает: «Петя, хватит херней маятся, иди делай уроки».

- «Мама, не мешай, я решаю задачу об эквивалентности классов матриц!»

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от Legioner

>Решено правда численно с определённой погрешностью. Аналитически лень )

Таки аналитически проще. Ответ получается целым в градусах.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

> ну неплохо бы до </thread> найти углы трапеции

у меня получилось 72 градуса у большего основания и 108 у меньшего

unC0Rr ★★★★★
()
Ответ на: комментарий от dikiy

Геометрия прочно впечаталась в сознание со школы, её ещё помню, в отличие от всяких дифур в универе

unC0Rr ★★★★★
()

так я не понял. ведь все 6 привильных вариантов не выявлено.
вот список:
1-ый ТС и его дефолтный квадрат
2-ой я
3-ий Ромб, образованный двумя правильными треугольниками unC0Rr
ещё ?

alikhantara
()
Ответ на: комментарий от alikhantara

Ещё правильный треугольник с точками на срединном перпендикуляре по обе стороны от вершины и трапеция

unC0Rr ★★★★★
()
Ответ на: комментарий от dikiy

>>Так и представил себе старшеклассника: сидящего дома и увлеченно строит какую-то херню из жвачки и обломанных спичек.

Не ну а чо, тот факт, что фундаментальная группа SO3 вращений трехмерного пространства содержит пару элементов, Дирак обосновывал сжиганием конструкции из сфер с гвоздями и веревками.

А по глиняному слепку пятой точки Максвелла до сих пор термодинамику изучают http://en.wikipedia.org/wiki/Maxwell%27s_thermodynamic_surface

mclaudt
()
Ответ на: комментарий от alikhantara

1 - ТС и его дефолтный квадрат
2 - 3 точки на окружности и одна в центре
3 - Ромб, образованный двумя правильными треугольниками
4,5 - правильный треугольник с точками на срединном перпендикуляре по обе стороны от вершины
6 - трапеция

unC0Rr ★★★★★
()
Ответ на: комментарий от alikhantara

Трапеция — это 4 вершины правильного пятиугольника. Доказывается с помощью пентаграммы.

lodin ★★★★
()
Ответ на: комментарий от mclaudt

Обобщая. Есть две точки лежащие на расстоянии x.

Варианты для третьей и четвёртой точек относительно первых двух:
1. От обеих на расстоянии x.
2. От обеих на y.
3. От одной x, от другой - y.

Обе не могут лежать на расстоянии x от первых двух. (противоречит условию задачи)

Варианты:

Одна на x от первых двух, другая на x и y:
1. Между собой на x. Ромб.
2. Между собой на y. Равносторонний треугольник, четвёртая за его пределами на расстоянии x от дальней точки и y от ближних.

Одна на x, другая на y:
2. Между собой на x. (было)
3. Между собой на y. Равносторонний треугольник, четвёртая в его середине.

Одна на x и y, другая на y:
4. Между собой на x. Равнобедренная трапеция.
2. Между собой на y. (было)

Обе на y:
5. Между собой на x. Квадрат.
1. Между собой на y. (было)

Пять вариантов.

alfix
()
Ответ на: комментарий от unC0Rr

>2 - 3 точки на окружности и одна в центре

4,5 - правильный треугольник с точками на срединном перпендикуляре по обе стороны от вершины


В середине окружности и в середине равностороннего треугольника - это, скажем так, один случай.

alfix
()
Ответ на: комментарий от mclaudt

Заодно будет видно, что вариантов ровно шесть (если это действительно так).

Если нигде не накосячил, получилось 10 классов.

#include <iostream>
#include <algorithm>

template<int SIZE>
class Matrix {

	char m[SIZE][SIZE];

public:

	// 6-bit encoding for 4x4 matrix:
	// x  0  1  2
	//    x  3  4
	//       x  5
	//          x
	void decode(int code)
	{
		for(int i = 0; i < SIZE; ++i) for(int j = i + 1; j < SIZE; ++j)
		{
			char c = '0' + (code & 1);
			m[i][j] = c;
			m[j][i] = c;
			code = (code >> 1);
		}
		for(int i = 0; i < SIZE; ++i)
		{
			m[i][i] = 'x';
		}
	}
	char encode() const
	{
		int code = 0;
		for(int i = 0; i < SIZE; ++i) for(int j = i + 1; j < SIZE; ++j)
		{
			char c = m[i][j] - '0';
			code = ( (code << 1) | c );
		}
		return code;
	}
	void print() const
	{
		for(int i = 0; i < SIZE; ++i) for(int j = 0; j < SIZE; ++j)
		{
			std::cout << " " << m[i][j] << " ";
			if(j+1 == SIZE) std::cout << std::endl;
		}
		std::cout << std::endl;
	}
	void permute(int p[SIZE])
	{
		char tmp[SIZE][SIZE];

		for(int i = 0; i < SIZE; ++i)
		for(int j = 0; j < SIZE; ++j)
		{
			tmp[i][j] = m[i][p[j]];
		}

		for(int i = 0; i < SIZE; ++i)
		for(int j = 0; j < SIZE; ++j)
		{
			m[i][j] = tmp[p[i]][j];
		}
	}
};

bool test_matrix(int code)
{
	Matrix<4> matrix;
	int p[4]={0,1,2,3};
	while(std::next_permutation(p, p + sizeof(p)/sizeof(p[0])))
	{
		matrix.decode(code);
		matrix.permute(p);
		if(code < matrix.encode()) return false;
	}
	matrix.decode(code);
	matrix.print();
	return true;
}

int main()
{
	for(int code = 0; code < (1 << 6); ++code) test_matrix(code);
}
 x  0  0  0 
 0  x  0  0 
 0  0  x  0 
 0  0  0  x 

 x  0  0  0 
 0  x  0  0 
 0  0  x  1 
 0  0  1  x 

 x  1  0  0 
 1  x  0  0 
 0  0  x  1 
 0  0  1  x 

 x  0  0  0 
 0  x  0  1 
 0  0  x  1 
 0  1  1  x 

 x  0  1  0 
 0  x  0  1 
 1  0  x  1 
 0  1  1  x 

 x  1  1  0 
 1  x  0  1 
 1  0  x  1 
 0  1  1  x 

 x  0  0  0 
 0  x  1  1 
 0  1  x  1 
 0  1  1  x 

 x  0  0  1 
 0  x  1  1 
 0  1  x  1 
 1  1  1  x 

 x  0  1  1 
 0  x  1  1 
 1  1  x  1 
 1  1  1  x 

 x  1  1  1 
 1  x  1  1 
 1  1  x  1 
 1  1  1  x 
Manhunt ★★★★★
()
Ответ на: комментарий от alfix

>>Пять вариантов.

Их по крайней мере 6. Не вчитывался в решение, но предполагаю что, так как ты решал без предположения кто длиннее а кто короче, то решил задачу о количестве классов эквивалентности порождажемых не только операциями, указанными тут http://www.linux.org.ru/jump-message.jsp?msgid=6234841&cid=6235048 но еще и операцией замены 0-1 в недиагональных позициях. Вышо меньше чем нужно.

Ну да так и есть.

4x2y на деле дает два варианта: 4 коротких 2 длинных и 4 длинных 2 коротких.

mclaudt
()
Ответ на: комментарий от mclaudt

Так что с точностью до замены «длинная сторона»-«короткая сторона» классов пять. А так - видимо шесть.

mclaudt
()
Ответ на: комментарий от Manhunt

Во-во, вроде похоже, теперь убрать из них неуплощаемые. Интересно, как сделать это алгебраически. Как-то задетектить и выкорчевать тетраэдры.

mclaudt
()
Ответ на: комментарий от mclaudt

Неуплощаемые - это те, где все нули или единицы, либо только один ноль или единица. Как доказать не знаю, думаю.

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.