Нахождение центра окружности

oleg1966

У нас что-то на работе дикий затуп на эту тему :)
Итак:
Есть окружность на плоскости.
Вопрос - можно ли поставить точку центра этой окружности имея в своем распоряжении только линейку и карандаш?
У линейки нет делений, так же у линейки только одна прямая сторона, и в ней нет ни одного прямого угла. Никаких циркулей нет. И использовать линейку для рисования окружностей тоже нельзя.
Линий проводить можно бесконечное количество, то есть считаем, что толщина линий близка к нулю.

vtk50

Так вроде не выйдет...
Есть для линейки с параллельными сторонами:
http://possward.blogspot.ru/2010/02/circle-centre.html

stm5395371

Если на плоскости нарисована одна окружность, но её центр не дан, построить его одной линейкой невозможно, см. Прасолов В.В. "Задачи по геометрии", задача 30.58

oleg1966

Если на плоскости нарисована одна окружность, но её центр не дан, построить его одной линейкой невозможно
В чистом виде да - нельзя.
Вопрос - можем ли мы бесконечно близко приблизиться к этой точке?
То есть, чтобы она построилась в пределе какой-то определенной последовательности построений.

vodnik2

В двух словах: есть проективные преобразования, которые оставляют эту окружность на месте и сохраняют прямые, но сдвигают центр этой окружности; построения при помощи только линейки инварианты относительно таких преобразований, а значит центр найти нельзя. Подробнее должно быть расписано в Прасолове по приведенной ссылке..

stm8853410

Приближённо это сделать можно.
1) Если вне окружности есть точа Х, то из точки Х можно провести две касательные к окружности. Прямая, проходящая через точки касания, называется полярой этой точки относительно окружности. С помощью карандаша и линейки можно построить поляру, см. рисунок или погугли.
(на рисунке поляра точки проведена пунктиром)
2) Если ты возьмёшь о-очень далёкую точку, то её поляра будет почти совпадать с диаметром.
Если возьмёшь две точки A и B, A — офигенно далеко справа, B — офигенно далеко снизу, то их поляры будут пересекаться почти в центре окружности.
Но учти, что если радиус окружности — 10 см, а центр нужно получить с точностью 1 миллиметр, то точки A и B придётся ставить на расстоянии по крайней мере 10 метров. С практической точки зрения проще циркуль приобрести.

Niklz

>> С практической точки зрения
:grin:
я так и представляю, как они сидят на работе в пустой белой комнате, с линейкой и кем-то оставленной окружностью. или, может у автора работа такая - находить центры окружностей и, он думает как сэкономить на инструменте!

dunkel68

то из точки Х можно провести две касательные к окружности
c помощью одной линейки нельзя провести касательную к окружности строго говоря
ok

Damrad

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

vtk50

Строго говоря, не бесконечно близко :grin:

stm8853410

Это как раз можно, и притом абсолютно точно.
0. Пусть есть окружность U и точка X вне её.
1. Проводим из точки Х три секущие. Первая пересекает окружность в точках A_1 и B_1 (зелёные точки вторая — в A_2 и B_2 (жёлтые точки третья — в A_3 и B_3 (синие точки).
2. Находим точку C — пересечение A_1B_2 и B_1A_2. Находим точку D — пересечение A_3B_2 и B_3A_2. (на рисунке это две красные точки)
3. Прямая CD пересекает окружность U в двух точках, которые являются нужными нам точками касания, то есть сама CD — это поляра точки Х. Это не очевидно, но можно взять циркуль, линейку и убедиться экспериментально (или доказать, если получится).

Thanhsoa

Если возьмёшь две точки A и B, A — офигенно далеко справа, B — офигенно далеко снизу
Если рассматривать исходную задачу, как задачу по математике, то ты, вообще говоря, не можешь выбрать точки "далеко справа" и "далеко снизу". Это кажется интуитивным, потому что человек умеет на глаз оценивать расстояние и угол. Но линейка без делений этого не умеет.

Vlad128

спрашивали про приближающий процесс. Так вот: надо брать все дальше и дальше, порядок точек на прямой можно определять :)

stm8853410

Да, в стандартном формализме построений так просто делать нельзя.
Но вроде бы я умею показывать, что можно построить последовательность точек, бесконечно удаляющуюся от окружности. Для этого "глазомер" должен уметь всего лишь понимать, какая из трёх точек на одной прямой лежит между двумя другими. А алгоритм построения становится "логическим", то есть там появляются условные переходы вида
 if точка i лежит между точками j и k:
делаем такие-то действия
else:
делаем что-то ещё.

Vlad128

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

stm7543347

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

Thanhsoa

Т.е. в итоге получаем задачу построить бесконечно удаляющуюся последовательность точек при помощи одной линейки.
Да, согласен. Но мне кажется в этом как раз и затык.
Из тех же соображений про проективные преобразования, про которые выше написал.
По сути при построении линейкой мы можем выбирать произвольные точки с учетом ориентации, например, между двумя имеющимися или по разные стороны от имеющиеся прямой и т.д., еще можем проводить через две точки прямую и можем фиксировать точку пересечения двух прямых.
Так вот если предположить, что мы придумали алгоритм, строящий последовательность точек на прямой, уходящую в бесконечность, то можно осуществить проективное преобразование плоскости, которое эту последовательность сделает сходящейся, но при этом наш алгоритм будет инвариантен относительно этого преобразования (т.к. прямые перейдут в прямые, точки в точки и точки пересечения в новые точки пересечения). Получится, что на преобразованной плоскости наш алгоритм почему-то не сработал.

stm8853410

Твоё рассуждение верно, если у нас при построении нет никакой обратной связи.
Пусть у нас есть прямая, две (жёлтая и синяя) точки на ней и две (красных) точки не на прямой:

(рис. 1)
Если мы через две красных точки проведём новую прямую, то она пересечёт исходную прямую в новой точке (зелёный крестик). И эта новая точка по отношению к жёлтой и синей может располагаться тремя способами.

(рис. 2, жёлтая точка посередине)

(рис. 3, синяя точка посередине)

(рис. 4, зелёная точка посередине)
Обратной связью я называю как раз то, что нам в процессе построения разрешается проверять, какая из трёх точек, лежащих на одной прямой, лежит между двумя другими.
И дальнейшие построения выполняются в результате такой проверки: "если точка A лежит между B и C, проводим прямую AD, а иначе проводим прямую BC".
Так вот,если есть такая обратная связь, то бесконечно удалающуюся последовательность точек с помощью одной линейки построить можно. Боюсь, у меня не получится записать это коротко и понятно.
Хотя проективные преобразования сохраняют точки, прямые и так далее, они меняют порядок точек:

(рис. 5, на вертикальной прямой цвета точек в радужном порядке, а после проективного преобразования сдвигаются по циклу).
Поэтому "обмануть" этот алгоритм с помощью проективного преобразования не удастся: на каком-то шаге мы увидим, что точки на прямой расположены в другом порядке, и будем выполнять другие действия.
NB: даже если разрешить "обратную связь", за _конечное_ число ходов _точно_ построить центр окружности нельзя: пусть есть работающий алгоритм построения центра, в котором проводится 100 прямых и отмечается 500 точек, тогда существует проективное преобразование, которое выбивает точку из центра окружности, но чертёж меняет "очень слабо", то есть взаимное расположение точек не меняет.
Если проводить бесконечное число точек и прямых, то такого преобразования может не найтись.

zombzone

Согласен, что можно построить последовательность точек, в которой каждая следующая будет, например, правее предыдущей, но как сделать так, чтобы эта последовательность гарантированно уходила в бесконечность?

olga58

а если из этих точек (касательная к окружности) теперь провести перпендикуляры?

zombzone

С линейкой и без циркуля? ;)

stm8853410

Наконец-то дошли руки (надеюсь, у всех читающих это сообщение в настройках стоит авторесайз).
Сейчас я покажу, как с помощью одной линейки строить на прямой последовательность точек, убегающую на бесконечность.
Итак, алгоритм. В каждый момент времени на картинке будут прямая a, прямая b, точки A и B на прямой b, прямая l_j (j — это индекс) и точка X_i (i — другой индекс) на прямой a.

Опишем две базовые операции: первая операция строит на прямой a новую точку X_{i+1}, вторая операция строит новую прямую l_{j+1}.
Итак, первая операция:
1. Проводим отрезок X_i A как на картинке, в пересечении с прямой l_j получается точка Y_i.
2. Проводим через B и Y_j прямую до пересечения с прямой a. Если точка пересечения лежит правее X_i (как на картинке то мы говорим, что операция удалась и обозначаем эту новую точку X_{i+1}.

На следующей картинке видно, что можно применить эту операцию ещё раз и по точке X_{i+1} построить точку X_{i+2} (ещё одна зелёная, простите, обозначения на чертеже немного хромают)

А вот точку X_{i+3} таким методом построить в нашем случае не удастся, так как прямая BY_{i+2} будет пересекать прямую a "не с той стороны".
 
Теперь опишем вторую операцию. Итак, у нас проведено три прямых: a, b, l_j.
Будем строить l_{j+1}. Для этого возьмём и проведём из точки B два луча, пересекающие прямые a и l_j. Получатся четыре точки пересечения, потом пересекаем два отрезка как на картинке и получаем зелёную точку.

Через эту точку проводим прямую — это и будет l_{j+1}.

(NB: сейчас было много свободы в выборе двух лучей из точки B. Но на самом деле все полученные таким образом прямые l_{j+1} совпадают.)
Теперь, если мы будем пытаться делать первую операцию и строить точку X_{i+3} с новой прямой (то есть l_{j+1} вместо l_j то у нас это получится (в смысле на этой картинке получается, а вообще говоря, может и не получиться).

Теперь соберём из кусочков алгоритм.
Начинаем с какой-то точки X_1 и прямой l_1.
Пока возможно, делаем операция первого типа и строим X_2, X_3 и так далее. В какой-то момент операцию совершить не удастся.
Тогда делаем операции второго типа, пока с помощью новой прямой не получится совершить операцию первого типа. Снова делаем операции первого типа, пока возможно, и так далее.
Замечания:
1) Точки A, B и прямые a,b никогда не меняются.
2) Как только построили точку Х_{i+1}, про X_i можно забыть. Аналогично, можно помнить только про последнюю прямую l_j, предыдущие не нужны.
Доказательство того, что последовательность точек X_i уходит на бесконечность: те, кто знают, что такое проективные преобразования, переведите прямую a на бесконечность (нужно будет показать, что последовательность X_i сходится к точке пересечения a и той прямой, которая раньше была бесконечно удалённой). А тем, кто не знает, быстро объяснить, я думаю, не получится.
Оставить комментарий
Имя или ник:
Комментарий: