Задачи, неразрешимые циркулем и линейкой. Построение параллельной прямой, отстоящей на заданное расстояние от данной прямой

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-1.jpg" alt=">Построение с помощью линейки и циркуля Геометрия ">

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-2.jpg" alt="> Построить отрезок равный данному Ú Задача А В "> Построить отрезок равный данному Ú Задача А В На данном луче от его начала С отложить отрезок, равный данному Ú Решение 1. Изобразим фигуры, данные в D условии задачи: луч ОС и отрезок АВ О 2. Затем циркулем построим окружность радиуса АВ и с центром О. 3. Эта окружность пересечёт луч ОС в некой точке D. Отрезок OD – искомый.

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-3.jpg" alt="> Построение угла равного данному Рассмотрим треугольники "> Построение угла равного данному Рассмотрим треугольники Ú АВС и ОDE. Задача В Отрезки АВ и АС являются равный Отложить от данного луча угол, данному Ú радиусами окружности с Решение 1. центром А, савершиной А и луч и ОЕ Построим угол отрезки OD ОМ А С 2. – радиусами окружности с Проведем окружность произвольного центром О. Таквершине А данного радиуса с центром в как по угла. 3. построениюпересекает стороны Эта окружность эти окружности имеют равные радиусы, то угла в точках В и С. 4. АВ=OD, AC=OE. Также же Затем проведём окружность того по Е радиуса с центром в начале данного построению ВС=DE. М луча ОМ. О D Следовательно, треугольники 5. Она пересекает луч в точке D. 6. равны по построим окружность с После этого 3 сторонам. Поэтому центром D, радиус которой равен ВС 7. угол DOEс= углу BAC. Т. е. Окружности центрами О и D построенный угол МОЕ равен пересекаются в двух точках. Одну из углу А. буквой Е них назовём 8. Докажем, что угол МОЕ - искомый

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-4.jpg" alt="> Построение биссектрисы угла Задача Ú"> Построение биссектрисы угла Задача Ú Рассмотрим треугольники Ú АСЕ и АВЕ. биссектрису угла Построить Они равны по Ú трём сторонам. АЕ – общая, Решение Е 1. АС и АВ равны как угол ВАС Изобразим данный радиусы 2. одной и тойокружность Проведём же окружности, В СЕ = ВЕ по построению. произвольного радиуса с С Ú Изцентром А. Она пересечёт равенства треугольников следует, что угол САЕ В и С стороны угла в точках = углу 3. ВАЕ, т. е. луч АЕдве Затем проведём – окружности одинакового биссектриса данного угла. А радиуса ВС с центрами в точках В и С 4. Докажем, что луч АЕ – биссектриса угла ВАС

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-5.jpg" alt="> Построение перпендикулярных прямых Ú Задача Даны прямая"> Построение перпендикулярных прямых Ú Задача Даны прямая и точка на ней. Построить прямую, проходящую через данную точку Р и перпендикулярную данной прямой. Ú Решение 1. Построим прямую а и точку М, принадлежащую этой прямой. 2. На лучах прямой а, исходящих из точки М, отложим равные отрезки МА и МВ. М а Затем построим две окружности с центрами А и В радиуса АВ. Они пересекутся в двух точках: P и Q. А B 3. Проведём прямую через точку М и одну из этих точек, например прямую МР, и докажем, что эта прямая искомая, т. Е. что она перпендикулярна к данной прямой. 4. В самом деле, так как медиана РМ равнобедренного треугольника РАВ Q является также высотой, то РМ перпендикулярна а.

Src="https://present5.com/presentation/3/178794035_430371946.pdf-img/178794035_430371946.pdf-6.jpg" alt="> Построение середины отрезка Задача Ú Построить середину данного"> Построение середины отрезка Задача Ú Построить середину данного отрезка Ú Решение Р 1. Пусть АВ – данный отрезок. 2. Построим две окружности с 21 центрами А и В радиуса АВ. Они пересекаются в точках Р и Q. О 3. Проведём прямую РQ. Точка О пересечения этой прямой с А B отрезком АВ и есть искомая середина отрезка АВ 4. В самом деле, треугольники АРQ и ВРQ равны по трём сторонам, поэтому угол 1 = Q углу 2 5. Следовательно отрезок РО – биссектриса равнобедренного треугольника АРВ, а значит, и медиана, т. Е. точка О – середина отрезка АВ.

Известная с античных времён.

В задачах на построение возможны следующие операции:

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

Простой пример

Задача. С помощью циркуля и линейки разбить данный отрезок AB на две равные части. Одно из решений показано на рисунке:

  • Циркулем проводим окружность с центром в точке A радиусом AB .
  • Проводим окружность с центром в точке B радиусом AB .
  • Находим точки пересечения P и Q двух построенных окружностей.
  • Линейкой проводим отрезок, соединяющий точки P и Q .
  • Находим точку пересечения AB и PQ . Это - искомая середина отрезка AB .

Правильные многоугольники

Античным геометрам были известны способы построения правильных для n=2^k\,\! , 3\cdot 2^k , 5\cdot 2^k и 3\cdot5\cdot2^k .

Неразрешимые задачи

Следующие три задачи на построение были поставлены ещё в античности:

  • - разбить произвольный угол на три равные части.
  • - построить отрезок, являющийся ребром куба в два раза большего объёма, чем куб с данным ребром.
  • - построить квадрат, равный по площади данному кругу.

Построения одним циркулем и одной линейкой

По теореме Мора-Маскерони (Mohr–Mascheroni theorem) с помощью одного циркуля можно построить любую фигуру, которую можно построить циркулем и линейкой. При этом прямая считается построенной, если на ней заданы две точки.

Легко заметить, что с помощью одной линейки можно проводить только проективно-инвариантные построения (см., например, в теории поверхностей ).

В частности, невозможно даже разбить отрезок на две равные части. Но при наличии на плоскости заранее проведённой окружности с отмеченным центром с помощью линейки можно провести те же построения, что и циркулем и линейкой (теорема Понселе-Штейнера (Poncelet-Steiner theorem), .

См.также

  • - программа, позволяющая делать построения с помощью циркуля и линейки.

Литература

§ 5 173

одного циркуля - не проводя самого отрезка. Вот решение этой задачи. Опишем окружность радиусом AB с центром B и на нем, отправляясь от A, как раньше, отмерим последовательно три дуги радиусом AB. Последняя точка C будет лежать

на прямой AB, причем мы бу-

дем иметь: AB = BC. Затем опи-

шем окружность радиуса AB с

центром A и построим точку C0 ,

обратную точке C относитель-

но этой окружности. Тогда полу-

AC0 · AC = AB2 ,

AC0 · 2AB = AB2 ,

2AC0 = AB.

Значит, C0 есть искомая середина

Рис. 44. Нахождение середины отрезка

Другое построение с помо-

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

извольную

на окружности и около нее как центра

описываем круг произвольного радиу-

са, пересекающийся с данным кругом в

точках R и S. Из этих последних то-

чек как центров описываем дуги ради-

усом RP = SP , пересекающиеся, кроме

точки P , еще в точке Q. Сравнивая то,

что получилось, с рис. 41, мы видим,

что неизвестный центр Q0 есть точка,

обратная точке Q относительно окруж-

Рис. 45. Нахождение

ности с центром P , и Q0 может быть, как

мы видели, построена с помощью одного

§ 5. Построения с помощью других инструментов. Построения Маскерони с помощью одного циркуля

*1. Классическая конструкция, служащая для удвоения куба. Мы рассматривали до сих пор только проблемы геометрических построений без использования иных инструментов, кроме циркуля и линейки. Если допускаются и другие инструменты, то, разумеется, разнообра-

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

Рис. 46. Инструмент, служащий для удвоения куба

зие возможных построений сильно увеличивается. Следующий пример может служить образцом того, как греки решали проблему удвоения куба. Рассмотрим (рис. 46) жесткий прямой угол MZN и подвижной прямоугольный крест V W , P Q. Двум дополнительным стержням RS и T U предоставлена возможность скользить, оставаясь перпендикулярными к сторонам прямого угла. На кресте пусть выбраны фиксированные точки E и G, причем расстояния GB = a и BE = f заданы. Располагая крест таким образом, чтобы точки E и G соответственно лежали на NZ и MZ, и перемещая стержни T U и RS, можно весь аппарат привести в такое положение, чтобы лучевые перекладины креста BW , BQ, BV проходили через вершины A, D, E прямоугольника ADEZ. Указанное на чертеже расположение всегда возможно при условии f > a. Мы видим сразу, что a: x = x: y = y: f, откуда, в частности, если положено f = 2a, получается x3 = 2a3 . Значит, x есть ребро куба, объем которого вдвое больше, чем объем куба с ребром a. Таким образом, поставленная задача

§ 5 ПОСТРОЕНИЯ С ПОМОЩЬЮ ДРУГИХ ИНСТРУМЕНТОВ 175

2. Построения с помощью одного циркуля. Если вполне естественно, что с допущением большего разнообразия инструментов оказывается возможным решать более обширное множество задач на построение, то можно было бы предвидеть, что, напротив, при ограничениях, налагаемых на инструменты, класс разрешимых задач будет суживаться. Тем более замечательным нужно считать открытие, сделанное итальянцем Маскерони (1750–1800): все геометрические построения, выполнимые с помощью циркуля и линейки, могут быть выполнены с помощью одного только циркуля. Следует, конечно, оговорить, что провести на самом деле прямую линию через две данные точки без линейки невозможно, так что это основное построение не покрывается теорией Маскерони. Вместо того приходится считать, что прямая задана, если заданы две ее точки. Но с помощью одного лишь циркуля удается найти точку пересечения двух прямых, заданных таким образом, или точку пересечения прямой с окружностью.

Вероятно, простейшим примером построения Маскерони является удвоение данного отрезка AB. Решение было уже дано на стр. 166 . Далее, на стр.167 мы научились делить данный отрезок пополам. Посмотрим теперь, как разделить пополам дугу окружности AB с центром O.

описание этого построения (рис. 47).

Радиусом AO проводим две дуги с

центрами A и B. От точки O откла-

дываем на этих дугах две такие ду-

ги OP и OQ, что OP = OQ = AB. За-

тем находим точку R пересечения ду-

ги с центром P и радиусом P B и дуги

с центром Q и радиусом QA. Наконец,

взяв в качестве радиуса отрезок OR,

опишем дугу с центром P или Q до

пересечения с дугой AB - точка пе-

Рис. 47. Нахождение середины ду-

ресечения и является искомой сред-

ги без линейки

ней точкой дуги AB. Доказательство

предоставляем читателю в качестве упражнения.

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

1. Провести окружность, если заданы центр и радиус.

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

2. Найти точки пересечения двух окружностей.

3. Найти точки пересечения прямой и окружности.

4. Найти точку пересечения двух прямых.

Любое геометрическое построение (в обычном смысле, с допущением циркуля и линейки) составляется из выполнения конечной последовательности этих элементарных построений. Что первые два из них выполнимы с помощью одного циркуля, ясно непосредственно. Более трудные построения 3 и 4 выполняются с использованием свойств инверсии, рассмотренных в предыдущем пункте.

Рис. 48. Пересечение окружности

Рис. 49. Пересечение окружно-

прямой, не проходящей через

сти и прямой, проходящей через

Обратимся к построению 3: найдем точки пересечения данной окружности C с прямой, проходящей через данные точки A и B. Проведем дуги с центрами A и B и радиусами, соответственно равными AO и BO; кроме точки O, они пересекутся в точке P . Затем построим точку Q, обратную точке P относительно окружности C (см. построение, описанное на стр. 167 ). Наконец, проведем окружность с центром Q и радиусом QO (она непременно пересечется с C): ее точки пересечения X и X0 с окружностью C и будут искомыми. Для доказательства достаточно установить, что каждая из точек X и X0 находится на одинаковых расстояниях от O и P (что касается точек A и B, то аналогичное их свойство сразу вытекает из построения). Действительно, достаточно сослаться на то обстоятельство, что точка, обратная точке Q, отстоит от точек X и X0 на расстояние, равное радиусу окружности C (см. стр.165 ). Стоит отметить, что окружность, проходящая через точки X, X0 и O, является обратной прямой AB в инверсии относительно круга C, так как эта окружность и прямая AB пересекаются с C в одних и тех же точках. (При инверсии точки основной окружности остаются неподвижными.)

Рис. 50. Пересечение двух прямых

§ 5 ПОСТРОЕНИЯ С ПОМОЩЬЮ ДРУГИХ ИНСТРУМЕНТОВ 177

Указанное построение невыполнимо только в том случае, если прямая AB проходит через центр C. Но тогда точки пересечения могут быть найдены посредством построения, описанного на стр. 169 , как середины дуг C, получающихся, когда мы проводим произвольную окружность с центром B, пересекающуюся с C в точках B1 и B2 .

Метод проведения окружности, обратной прямой, соединяющей две данные точки, немедленно дает и построение, решающее задачу 4. Пусть прямые даны точками A, B и A0 , B0 (рис. 50). Проведем произвольную окружность C и с помощью указанного выше метода построим окружно-

обратные прямым AB и A0 B0 . Эти

окружности пересекаются в точке O

и еще в одной точке Y . Точка X, об-

ратная точке Y , и есть искомая точ-

ка пересечения: как ее построить -

уже было разъяснено выше. Что X

есть искомая точка, это ясно из то-

го факта, что Y есть единственная

точка, обратная точке, одновременно

принадлежащей обеим прямым AB

и A0 B0 ; следовательно, точка X, об-

ратная Y , должна лежать одновре-

менно и на AB, и на A0 B0 .

Этими двумя построениями за-

канчивается доказательство эквивалентности между построениями Мас-

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

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

X стве примера мы еще укажем пятиугольни-

ка; точнее говоря, речь идет о нахождении

каких-то пяти точек на окружности, кото-

рые могут служить вершинами правильно-

го вписанного пятиугольника.

Пусть A - произвольная точка окруж-

ности K. Так как сторона правильного

вписанного шестиугольника равна радиусу

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

на K такие точки B, C, D, что ^ AB =

K ^ BC = ^ CD = 60 ◦ (рис. 51). Проведем

дуги с центрами A и D радиусом, рав-

Рис. 51. Построение правильного пятиугольника

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

ным AC; пусть они пересекаются в точ-

ке X. Тогда, если O есть центр K, дуга с

центром A и радиусом OX пересечет K в точке F , являющейся серединой дуги BC (см. стр. 169 ). Затем радиусом, равным радиусу K, опишем дуги с центром F , пересекающиеся с K в точках G и H. Пусть Y есть точка, расстояния которой от точек G и H равны OX и которая отделена от X центром O. В таком случае отрезок AY как раз и есть сторона искомого пятиугольника. Доказательство предоставляется читателю в качестве упражнения. Интересно отметить, что при построении используются только три различных радиуса.

В 1928 г. датский математик Ельмслев нашел в книжной лавке в Копенгагене экземпляр книги под названием Euclides Danicus, опубликованной в 1672 г. никому не известным автором Г. Мором. По титульному листу можно было сделать заключение, что это - просто один из вариантов евклидовых «Начал», снабженный, может быть, редакторским комментарием. Но при внимательном рассмотрении оказалось, что в ней содержится полное решение проблемы Маскерони, найденное задолго до Маскерони.

Упражнения. В дальнейшем дается описание построений Мора. Проверьте их правильность. Почему можно утверждать, что они решают проблему Маскерони?

1) К отрезку AB длины p восставите перпендикуляр BC. (Указание: продолжите AB до точки D таким образом, что AB = BD. Проведите произвольным радиусом дуги с центрами A и D и таким образом определите C.)

2) В плоскости даны как угодно расположенные отрезки длины p и q,

причем p > q. Постройте с помощью 1) отрезок длины x = p2 − q2 .

3) По заданному отрезку a постройте отрезок a 2. (Указание: обратите

√ √

внимание, что (a 2)2 = (a

3)2 − a2 .)

4) По данным отрезкам p и q постройте отрезок x =

p2 + q2

. (Указание:

примите во внимание, что

x2 = 2p2

Придумайте сами аналогич-

ные построения.

5) Пользуясь предыдущими результатами, постройте отрезки p + q и p − q, предполагая, что отрезки длины p и q заданы как-то на плоскости.

6) Проверьте и постарайтесь обосновать следующее построение середины M данного отрезка AB длины a. На продолжении отрезка AB найдем такие точки C и D, что CA = AB = BD. Построим равносторонний треугольник ECD согласно условию EC = ED = 2a и определим M как пересечение окружностей с диаметрами EC и ED.

7) Найдите прямоугольную проекцию точки A на отрезок BC.

8) Найдите x по условию x: a = p: q, где a, p и q - данные отрезки.

9) Найдите x = ab, где a и b - данные отрезки.

Вдохновляясь результатами Маскерони, Якоб Штейнер (1796–1863) предпринял попытку исследования построений, выполнимых с помощью одной только линейки. Конечно, одна только линейка не выводит за

ПОСТРОЕНИЯ С ПОМОЩЬЮ ДРУГИХ ИНСТРУМЕНТОВ

пределы данного числового поля, и потому она недостаточна для выполнения всех геометрических построений в классическом их понимании. Но тем более замечательны результаты, полученные Штейнером при введенном им ограничении - пользоваться циркулем только один раз. Он доказал, что все построения на плоскости, выполнимые с помощью циркуля и линейки, выполнимы также с помощью одной линейки при условии, что задан единственный неподвижный круг вместе с центром. Эти построения подразумевают применение проективных методов и будут описаны позднее (см. стр. 217 ).

* Без круга, и притом с центром, обойтись нельзя. Например, если дан круг, но не указан его центр, то найти центр с помощью одной линейки невозможно. Мы сейчас докажем это, ссылаясь, однако, на факт, который будет установлен позднее (см. стр. 240 ): существует такое преобразование плоскости самой в себя, что а) заданная окружность остается неподвижной, б) всякая прямая линия переходит в прямую, в) центр неподвижной окружности не остается неподвижным, а смещается. Само существование такого преобразования свидетельствует о невозможности построить центр данной окружности, пользуясь одной линейкой. В самом деле, какова бы ни была процедура построения, она сводится к ряду отдельных этапов, заключающихся в проведении прямых линий и нахождении их пересечений друг с другом или с данной окружностью. Представим себе теперь, что вся фигура в целом - окружность и все прямые, проведенные по линейке при выполнении построения центра - подвергнута преобразованию, существование которого мы здесь допустили. Тогда ясно, что фигура, полученная после преобразования, также удовлетворяла бы всем требованиям построения; но указываемое этой фигурой построение приводило бы к точке, отличной от центра данной окружности. Значит, построение, о котором идет речь, невозможно.

3. Черчение с помощью различных механических приспособлений. Механические кривые. Циклоиды. Изобретение различных механизмов, предназначенных для того, чтобы чертить различные кривые, помимо окружности и прямой линии, чрезвычайно расширяет область фигур, допускающих построение. Например, если имеется инструмент, позволяющий чертить гиперболы xy = k, и другой инструмент, вычерчивающий параболы y = ax2 + bx + c, то любая проблема, приводящая к кубическому уравнению

точнее, корни уравнения (1) являются x-координатами точек пересечения гиперболы и параболы, представляемых уравнениями (2). Таким

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

Рис. 52. Графическое решение кубического уравнения

образом, решения уравнения (1) допускают построение, если разрешается пользоваться инструментами, с помощью которых можно начертить кривые (2).

Уже математикам древности были известны многие интересные кривые, которые могут быть определены и начерчены с помощью простых механических приспособлений. Среди таких «механических» кривых особенно видное место занимают циклоиды. Птолемей (около 200 года до нашей эры), обнаруживая необычайную проницательность, сумел использовать эти кривые для описания планетных движений.

Циклоида самого простого вида представляет собой траекторию движения точки P , фиксированной на окружности диска, катящегося без скольжения по прямой линии. На рис. 53 изображены четыре положения точки P в различные моменты времени. По форме циклоида напоминает ряд арок, опирающихся на горизонтальную прямую.

Разновидности этой кривой получаются, если возьмем точку P или внутри диска (как на спице колеса), или на продолжении радиуса за пределы диска.

ПОСТРОЕНИЯ С ПОМОЩЬЮ ДРУГИХ ИНСТРУМЕНТОВ

Рис. 53. Циклоида

Рис. 54. Циклоиды общего вида

Эти две кривые показаны на рис. 54.

Дальнейшие разновидности циклоиды возникают, когда наш диск катится не по прямой, а по дуге окружности. Если при этом катящийся диск с радиусом r остается все время касающимся изнутри той большой окружности C радиуса R, по которой он катится, то траектория точки, фиксированной на окружности диска, называется гипоциклоидой.

Когда диск прокатывается по всей окружности C ровно один раз, то точка P возвращается в исходное положение только в том случае, если радиус C является кратным радиуса c. На рис. 55 изображена замкнутая гипоциклоида, соответствующая предположению R = 3r. В более общем

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

случае, если R = m n r, то гипоциклоида замкнется после того, как диск c

прокатится по окружности C ровно n раз, и будет состоять из m арок. Заслуживает особого упоминания случай R = 2r. Любая точка P на окружности диска будет описывать в этом случае один из диаметров большой окружности C (рис. 56). Предоставляем читателю доказать это в качестве задачи.

Еще один тип циклоид получается, когда диск c катится по окружности C, касаясь ее все время извне. Получающиеся при этом кривые носят название эпициклоид.

*4. Шарнирные механизмы. Инверсоры Поселье и Гарта.

Оставим на время в стороне вопрос о циклоидах (они появятся еще раз в этой книге - довольно неожиданно) и обратимся к иным методам механического воспроизведения кривых линий. Мы займемся сейчас

шарнирными механизмами.

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

Рис. 57. Преобразование прямолинейного движения во вращательное

Шарнирные механизмы издавна находят себе применение как составные части машин. Одним из самых знаменитых (в историческом отношении) примеров является так называемый «параллелограмм Уатта». Это приспособление было изобретено Джемсом Уаттом при решении следующей проблемы: как связать поршень с точкой махового колеса таким образом, чтобы вращение колеса сообщало поршню прямолинейное движение? Решение, данное Уаттом, было лишь приближенным, и, несмотря на усилия многих первоклассных математиков, проблема конструирования механизма, сообщающего точке в точности прямолиней-

ПОСТРОЕНИЯ С ПОМОЩЬЮ ДРУГИХ ИНСТРУМЕНТОВ

ное движение, долгое время оставалась нерешенной. Было даже сделано предположение, что такой механизм неосуществим: это было как раз тогда, когда всякого рода «доказательства невозможности» привлекли к себе всеобщее внимание. Тем большее изумление было вызвано в кругах математиков, когда французский морской офицер Поселье (в 1864 г.) все же изобрел несложный механизм, действительно разрешающий проблему в положительном смысле. В связи с введением в употребление хорошо действующих смазочных веществ техническая проблема потеряла свое значение для паровых машин.

Рис. 58. Инверсор Поселье, преобразующий вращательное движение в прямолинейное

Назначение механизма Поселье заключается в том, чтобы превращать круговое движение в прямолинейное. В основе этого механизма лежит теория инверсии, изложенная в § 4. Как видно из рис. 58, механизм состоит из семи жестких стержней, два из них - длины t, четыре - длины s и один - произвольной длины. Точки O и R закреплены и расположены таким образом, что OR = P R. Весь аппарат может быть приведен в движение, будучи подчинен указанным условиям. Мы сейчас убедимся, что, когда точка P описывает дугу окружности с центром R и радиусом RP , точка Q описывает прямолинейный отрезок. Обозначая основание перпендикуляра, опущенного из точки S на прямую OP Q, через T , мы замечаем, что

OP · OQ = (OT − P T) · (OT + P T) = OT 2 − P T2 =

= (OT 2 + ST2 ) − (RT2 + ST2 ) = t2 − s2 . (3)

Величина t2 − s2 постоянная; положим t2 − s2 = r2 . Так как OP · OQ =

ГЕОМЕТРИЧЕСКИЕ ПОСТРОЕНИЯ

r2 , то точки P и Q взаимно обратные относительно окружности с центром O и радиусом r. В то время как P описывает дугу окружности, проходящей через O, Q описывает кривую, обратную этой дуге. Но кривая, обратная окружности, проходящей через O, есть, как мы видели, не что иное, как прямая линия. Итак, траектория точки Q есть прямая, и инверсор Поселье чертит эту прямую без линейки.

Другой механизм, решающий ту же проблему, есть инверсор Гарта. Он состоит всего лишь из пяти стержней, сочленение которых показано на рис. 59. Здесь AB = CD, BC = AD. Через O, P и Q обозначены точки, соответственно зафиксированные на стержнях AB, AD и CB, притом

таким образом, что OB AO =P AP D =QB CQ =m n . Точки O и S закреплены

на плоскости неподвижно, с соблюдением условия OS = P S. Больше связей нет, и механизм способен двигаться. Очевидно, прямая AC всегда

Рис. 59. Инверсор Гарта

параллельна прямой BD. В таком случае точки O, P и Q лежат на одной прямой, и прямая OP параллельна прямой AC. Проведем перпендикуляры AE и CF к прямой BD. Мы имеем

AC · BD = EF · BD = (ED + EB) · (ED − EB) = ED2 − EB2 .

Но 2 ED

AE2 = AD2

EB2 + AE2 = AB2

Следовательно,

(m + n)2

(m + n)2

Последняя полученная величина не изменяется при движении механизма. Поэтому точки P и Q являются взаимно обратными относительно

Геометрические задачи на построение

С помощью циркуля и линейки

учащаяся 8-А класса

Руководитель: Москаева В.Н.,

учитель математики

Нижний Новгород

Введение

Наглядность, воображение принадлежат больше искусству, строгая логика – привилегия науки. Сухость точного вывода и живость наглядной картины – «лёд и пламень не столь различны меж собой». Геометрия соединяет в себе эти две противоположности.

А. Д. Александров

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

Машина рисует мгновенно в течение нескольких секунд. Математик должен потратить довольно много времени, чтобы на языке, понятном машине объяснить ей то, что она должна сделать - написать программу и ввести её в машину, поэтому конструкторы нередко предпочитают работать с простейшими и древнейшими инструментами – циркулем и линейкой.

Что может быть проще? Гладкая дощечка с ровным краем - линейка, две заостренные палочки, связанные на одном конце - циркуль. С помощью линейки через две заданные точки проводят прямую. С помощью циркуля проводят окружности с данным центром и данного радиуса, отложить отрезок, равный данному.

Циркуль и линейка известны более 3 тысячи лет были уже известны, 200-300 лет назад их украшали орнаментами и узорами. Но, несмотря на это они и сейчас исправно служат нам. Простейших инструментов достаточно для огромного количества построений. Древние греки думали, что возможно любое разумное построение выполнить этими инструментами, пока не обнаружили три знаменательные задачи древности: «квадратуру круга», «трисекцию угла», «удвоение куба».

Поэтому считаю тему моей работы современной и важной для деятельности человека во многих сферах деятельности человека.

Все прекрасно знают, что математика используется в самых разных профессиях и жизненных ситуациях. Математика – предмет непростой. И геометрию большинство учащихся называет «трудной». Задачи на построение отличаются от традиционных геометрических задач.

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

Несмотря на богатое историческое прошлое, проблема решения задач на построение остается актуальной и в 21-м веке. В наше время бурно развиваются компьютерные технологии с применением графических редакторов для рисования геометрических объектов. Средства создания геометрических объектов изменились в связи с появлением новых компьютерных технологий. Однако, как и в глубокой древности, основными элементами при построении геометрических объектов остаются окружность и прямая, другими словами циркуль и линейка. С появлением новых компьютерных технологий возникли новые проблемы построения с использованием тех же объектов - прямой и окружности. Вот почему проблема решения задач на построение становится ещё более актуальной.

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

Цель моей работы: рассмотреть различные способы построения геометрических фигур с помощью циркуля и линейки.

Методы исследования:

ü Анализ уже существующих способов построений

ü Поиск новых способов, простых в применении (ГМТ и построения Штейнера)

Задачи:

ü получить более полное представление о различных способах построений

ü проследить за развитием этого фрагмента геометрии в истории математики

ü продолжить развитие исследовательских умений.

Из истории геометрического построения циркулем и линейкой.

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

Искусство построения геометрических фигур было в высокой степени развито в Древней Греции. Древнегреческие математики еще 3000 лет назад проводили свои построения с помощью двух приборов: гладкой дощечки с ровным краем – линейки и двух заостренных палок, связанных на одном конце – циркуля. Однако этих простейших инструментов оказалось достаточно для выполнения огромного множества различных построений. Древним грекам даже казалось, что любое разумное построение можно совершить этими инструментами, пока они не столкнулись с тремя знаменитыми впоследствии задачами.

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

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

Эти три задачи, так называемые 3 знаменитые классические задачи древности, привлекали внимание выдающихся математиков на протяжении двух тысячелетий. И лишь в середине XIX века была доказана их неразрешимость, то есть невозможность указанных построений лишь с использованием только циркуля и линейки. В математике это были первые результаты о неразрешимости задач, когда средства решения указаны. Они были получены средствами не геометрии, а алгебры (с помощью перевода этих задач на язык уравнений), что еще раз подчеркнуло единство математики. Не поддаваясь решению, эти проблемы обогатили математику значительными результатами, привели к созданию новых направлений математической мысли.

Еще одной интереснейшей задачей на построение с помощью циркуля и линейки является задача построения правильного многоугольника с заданным числом сторон. Древние греки умели строить правильный треугольник, квадрат, правильные пятиугольник и 15-угольник, а также все многоугольники, которые получаются из них путем удвоения сторон, и только их. Лишь в 1796 году великий немецкий математик К.Ф.Гаусс открыл способ построения правильного 17-угольника при помощи циркуля и линейки и указал все значения N, при которых возможно построение правильного N-угольника указанными средствами. Первокурсник Геттингенского университета Карл Гаусс решил задачу, перед которой математическая наука пасовала более 2 с лишним тысяч лет. Таким образом, была доказана невозможность построения с помощью циркуля и линейки правильных 7, 9, 11, 13, 18, 21, 22, 23 и т.д. угольников.

Теория построения при помощи циркуля и линейки получила свое дальнейшее развитие. Был получен ответ на вопрос: можно ли решить задачу с помощью только одного из двух рассматриваемых инструментов, и достаточно неожиданный. Независимо друг от друга, датчанин Г.Мор в 1672 году и итальянец Л.Маскерони в 1797 году доказали, что любая задача на построение, разрешаемая циркулем и линейкой, может быть точно решена с помощью только одного циркуля. Это кажется невероятным, но это так. А в XIX веке было доказано, что любое построение, выполняемое с помощью циркуля и линейки можно провести лишь с помощью одной линейки, при условии, что в плоскости построения задана некоторая окружность и указан ее центр.

3. Простейшие задачи на построение геометрических фигур с помощью циркуля и линейки

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

Построение 1. Построение отрезка, равного данному.

Дано: отрезок длины а.

Построить: отрезок АВ длины а.

Построение:

Построение 2. Построение угла, равного данному.

Дано: ∟AOB.

Построить: ∟ KMN, равный ∟ АОВ.

Построение:

Построение 3. Деление отрезка пополам (построение середины отрезка).

Дано: отрезок АВ.

Построить: точку О – середину АВ.

Построение:

Построение 4. Деление угла пополам (построение биссектрисы угла).

Дано: ∟ АВС.

Построить: ВD – биссектрису ∟АВС.

Построение:

Построение 5. Построение перпендикуляра к данной прямой, проходящей через данную точку.

а) Дано: прямая а, точка A а.

Построить:

прямой а.

Построение :

б) Дано: прямая а, точка A a.

Построить: прямую, проходящую через точку А, перпендикулярно к

прямой а.

Построение:

Построение 6 . Построение прямой, параллельной данной прямой и проходящей через данную точку.

Дано: прямая а, точка A a.

Построить: прямую, проходящую через точку А, параллельно прямой а.

I способ (через два перпендикуляра).

Построение:

II способ (через параллелограмм).

Построение:

Построение 7. Построение треугольника по трем сторонам.

Дано: отрезки длины a, b, c.

Построить: Δ ABC.

Построение:

Построение 8. Построение треугольника по двум сторонам и углу между ними.

Дано: отрезки длины b, c, угол α.

Построить: треугольник ABC.

Построение:

Построение 9. Построение треугольника по стороне и двум прилежащим углам.

Дано: отрезок длины c, углы α и β.

Построить: ΔABC.

Построение:

Построение 10. Построение касательной к данной окружности, проходящей через данную точку.

Дано: окружность (О), точка А вне ее.

Построить: касательную к окружности ω(О), проходящую через точку А.

Построение:

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

Решение задач на построение состоит из четырех частей:

1. Предположив, что задача решена, делаем от руки приблизительный чертеж искомой фигуры и затем, внимательно рассматриваем начерченную фигуру, стремясь найти такие зависимости между данными задачи и искомыми, которые позволили бы свести задачу на другие, известные ранее. Эта самая важная часть решения задачи, имеющая целью составить план решения, носит название анализа.

2. Когда таким образом план решения найден, выполняют сообразно ему построение.

3. Доказательство - для проверки правильности плана на основании известных теорем доказывают, что полученная фигура удовлетворяет всем требованиям задачи.

4. Исследование - задаются двумя вопросами:

1) При всяких ли данных возможно решение?

2) Сколько существует решений?

Рассмотрим применение данных этапов на примере решения следующей задачи.

Задача: Построить треугольник, зная его основание b, угол A, прилежащий к основанию, и сумму s двух боковых сторон.

Анализ: Предположим, что задача решена, т.е. найден такой ΔAВС, у которого основание AС=b, ∟ВАС=A и AВ+ВС=s . Рассмотрим теперь полученный чертеж. Сторону AС, равную b , ∟ВАС=A , мы строить умеем. Значит, остается найти на другой стороне ∟A такую точку В , чтобы сумма AВ+ВС равнялась s . Продолжив , отложим отрезок AD , равный s . Теперь вопрос приводится к тому, чтобы на прямой AD отыскать такую точку В , которая была бы одинаково удалена от С и D . Такая точка как мы знаем, должна лежать на перпендикуляре, проведенном к отрезку СD через его середину. Точка В найдется в пересечении этого перпендикуляра с АD .

Построение:

1. Строим ∟А , равный данному углу

2. На его сторонах откладываем AС=b и AD=s

3. Через середину отрезка прямой СD проводим перпендикуляр ВЕ

4. ВЕ пересекает AD в точке В

5. Соединяем точки В и С

6. ΔAВС - искомый.

Доказательство:

Рассмотрим полученный ΔAВС, в нем ∟А равен данному углу (по пункту №1 построения). Сторона AС=b (пункт №2) и стороны АВ и ВС в сумме составляют s (пункты №2,3,4). Следовательно по 1-му признаку равенства треугольников ΔAВС - искомый.

Исследование:

1. При всяких ли данных возможно решение?

Рассматривая построение, мы замечаем, что задача возможна не при всяких данных. Действительно, если сумма s задана слишком малой сравнительно с b, то перпендикуляр ВЕ может не пересечь отрезка AD (или пересечет его продолжение за точку D), в этом случае задача окажется невозможной.

И, независимо от построения, можно видеть, задача невозможна, если s < b или s =b , потому что не может быть такого треугольника, у которого сумма двух сторон была бы меньше или равна третьей стороне.

2. Сколько существует решений?

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


©2015-2019 сайт
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27

Данная статья написана по материалам одного из разделов книги Седжвика, Уэйна и Дондеро "Программирование на языке Python", уже упоминавшейся ранее . Называется этот раздел "Системы итерационных функций", и в нём описано построение различных изображений, таких как треугольник Серпиньского, папоротник Барнсли и некоторых других, с помощью достаточно несложного алгоритма, который, к тому же, ещё и с лёгкостью реализуется.

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

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

За теоретической частью статьи будет следовать практическая, описывающая реализацию алгоритма на языке C99. Поскольку результатами работы программы будут являться изображения, мы будем использовать в программе графическую библиотеку pgraph , предполагая, что читатель, хотя бы в общих чертах, с ней знаком.

Итак, переходим к теоретической части нашего повествования.

Итерационные функции и случайные последовательности

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

Зададим 2 последовательности, x n n = 1 ∞ и y n n = 1 ∞ , с помощью следующих рекуррентных формул:

X n = f x n - 1 , y n - 1 , n ∈ ℕ , y n = g x n - 1 , y n - 1 , n ∈ ℕ .

Поясним, что x 0 и y 0 - это некоторые заранее заданные числа, а f (x , y ) и g (x , y ) - это некоторые функции двух переменных, называемые итерационными . Сам процесс вычисления очередного члена той или иной последовательности через такие функции будем называть итерациями , а приведённый выше набор рекуррентных формул - итерационной схемой.

Рекурсивный способ задания последовательностей, скорее всего, хорошо знаком читателю, если он изучал математику в вузе. Несколько необычным может показаться "перекрёстный" способ вычисления членов последовательностей, при котором для вычисления n -го члена каждой из двух последовательностей нужен не только n − 1-й член той же последовательности, но и n − 1-й член другой.

А теперь рассмотрим схему построения членов двух последовательностей, использующую не одну пару итерационных функций, а m пар. Каждая из этих функций будет линейной по обеим переменным, а также будет содержать аддитивную константу. Более конкретно, функции будут иметь вид:

F k x , y = a k x + b k y + c k g k x , y = d k x + e k y + h k , k = 0 , 1 , … , m - 1 .

Для каждого n , начиная с 1, будет случайным образом выбираться число от 0 до m − 1, и при вычислении x n и y n в рекуррентных формулах будет использоваться пара итерационных функций, индексы которых равны данному случайному числу. Отметим, что случайные числа, "появляющиеся" перед каждой итерацией, не обязаны быть равновероятными. Однако для разных шагов вероятность появления конкретного фиксированного числа одна и та же.

Давайте теперь сформулируем сказанное на строгом математическом языке. Рассмотрим последовательность дискретных независимых в совокупности случайных величин T n = 1 ∞ , распределённых по одному и тому же закону. А именно: каждая случайная величина принимает значения 0, 1, …, m − 1 с соответствующими вероятностями p 0 , p 1 , …, p m -1 .

Теперь последовательности, x n n = 1 ∞ и y n n = 1 ∞ зададим с помощью следующей итерационной схемы:

X n = f T n x n - 1 , y n - 1 , n ∈ ℕ , y n = g T n x n - 1 , y n - 1 , n ∈ ℕ .

Как и ранее, x 0 и y 0 - это некоторые заранее заданные числа.

Таким образом, каждая из последовательностей является случайной, т. е. её члены - это случайные величины. Однако, каждую из этих последовательностей можно "реализовать", т. е. вычислить все её члены (разумеется, таких реализаций будет бесконечно много).

Зададимся главным вопросом данного раздела. А какое же отношение изображения, которые мы собираемся строить, имеют к этой паре случайных последовательностей? Очень простое. Построим реализацию этих двух последовательностей. Для каждого натурального n пару (x n , y n ) можно рассматривать как координаты точки, заданной в декартовой прямоугольной системе координат на плоскости. Так вот, изображение, соответствующее некоторой паре реализованных последовательностей, представляет собой геометрическое место всех таких точек на плоскости.

Казалось бы, для каждой реализации пары последовательностей мы будем получать своё изображение, отличное от других. Однако, как это ни парадоксально, получаемые изображения каждый раз будут практически совпадать (т. е. при построении на компьютере будут неразличимы человеческим глазом). А при соответствующем подборе итерационных функций и законов распределения случайных величин, участвующих в формировании членов последовательностей, можно создавать весьма интересные узоры.

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

О генерации псевдослучайных чисел

При написании программы мы столкнёмся с необходимостью генерировать псевдослучайные числа, распределённые, вообще говоря, не равномерно, а по заранее заданному закону. В то же самое время, мы будем располагать лишь программным генератором псевдослучайных чисел, равномерно распределённых на промежутке . Как из второго распределения получить первое?

Переведём задачу в математическую плоскость. Пусть имеется непрерывная случайная величина U , распределённая равномерно на отрезке . Зададимся целью построить дискретную случайную величину T как функцию от U , таким образом, чтобы T принимала значения 0, 1, …, m − 1 с соответствующими вероятностями p 0 , p 1 , …, p m -1 .

Решить поставленную задачу весьма просто. Введём в рассмотрение суммы вероятностей

s k = ∑ i = 0 k - 1 p i , k = 0 , 1 , … , m - 1 .

Если верхний предел суммирования по i меньше нижнего, то такую сумму по определению будем полагать равной 0.

Т выразим через U следующим образом:

T = 0 , если U ∈ s 0 , s 1 , 1 , если U ∈ s 1 , s 2 , 2 , если U ∈ s 2 , s 3 , … … … … … … , … … … … … … , m - 1 , если U ∈ s m - 1 , 1 .

Очевидно, случайная величина T распределена по требуемому нами закону. Заметим, что, по сути, Т - это номер промежутка, в который попадает случайная величина U (при условии, что промежутки мы нумеруем числами от 0 до m − 1 в порядке возрастания их левых границ).

С практической точки зрения полученный результат позволяет на каждом шаге итерации в качестве номера итерационных функций брать номер промежутка, в который попадает число, сгенерированное датчиком псевдослучайных чисел, равномерно распределённых на отрезке .

А теперь можно переходить к написанию программы.

Структура программы

Программа состоит из файла main.c и файлов, образующих графическую библиотеку pgraph. Содержимое файла main.c начинается со следующей директивы, подключающей графическую библиотеку:

#include "pgraph.h"

Далее в файле содержатся описания глобальных константных переменных и константных массивов. За ними - определения функций get_random_value() и main() . Первая из них генерирует псевдослучайные числа, а вторая выполняет основную работу по построению изображений.

Глобальные константные переменные и константные массивы

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

Ниже приводятся описания данных констант и массивов.

  • n - количество итераций;
  • w - ширина изображения в пикселях;
  • h - высота изображения в пикселях;
  • xc - абсцисса начала новой системы координат в старой системе;
  • yc - ордината начала новой системы координат в старой системе;
  • l - длина в пикселях отрезка, параллельного одной из осей координат, имеющего в новой системе координат единичную длину;
  • m - количество пар итерационных функций, т. е. число m ;
  • s - одномерный массив размера m , содержащий суммы вероятностей случайных величин T n (k -й элемент массива содержит s k );
  • f - двухмерный массив, состоящий из m f k (x , y k , 0), (k , 1), (k , 2) содержат числа a k , b k , c k соответственно, где 0 ≤ k m − 1);
  • g - двухмерный массив, состоящий из m "строк" и 3-х "столбцов", содержащий константы, задействованные в функциях g k (x , y ) (элементы массива с индексами (k , 0), (k , 1), (k , 2) содержат числа d k , e k , h k соответственно, где 0 ≤ k m − 1).

Все переменные имеют тип int , а базовым типом всех массивов является double .

Поясним, что под "старой" системой координат подразумевается та, которая определена в библиотеке pgraph. Построения всех изображений будут вестись в новой системе, полученной из старой параллельным переносом (сдвиги по осям абсцисс и ординат равны соответственно x c и y c ) и "сжатием" в l раз. Таким образом, точка, имеющая в новой системе координаты (x , y ), в старой будет иметь координаты (x l + x c , y l + y c ). Излишне, думаю, пояснять, что за хранение чисел x c , y c и l ответственны константные переменные xc , yc и l соответственно.

Для хранения чисел x 0 и y 0 переменные не выделяются, поскольку во всех случаях построения изображений в качестве этих чисел берутся нули.

Генерация псевдослучайных чисел: функция get_random_value()

Функция get_random_value() при каждом обращении к ней генерирует псевдослучайное целое число в диапазоне от 0 до m − 1 в соответствии с описанной ранее схемой . Вот код этой функции:

1. int get_random_value() 2. { 3. double r = (double ) rand() / RAND_MAX; 4. int c = 1 ; 5. while (s[c] < r && ++c < m) 6. ; 7. return c - 1 ; 8. }

Получаем с помощью стандартной библиотечной функции rand() псевдослучайное число в диапазоне от 0 до значения макроса RAND_MAX , делим полученный результат на это значение и присваиваем частное переменной r (стр. 3). Теперь в r хранится число, принадлежащее отрезку . Его приближённо можно считать значением случайной величины, равномерно распределённой на этом отрезке.

Поясним, что значение макроса RAND_MAX , в нашем случае (т. е. в случае использования компилятора MinGW64 версии 4.9.2 для 64-битных систем) равно 32767.

Теперь, с помощью линейного поиска, задействующего цикл while , ищем индекс наибольшего элемента массива s , не превосходящего значение r , увеличенный на единицу, и сохраняем его в переменной c (см. стр. 4-6). Отметим, что в случае, если значение r - нулевое, цикл не выполняется ни разу, а переменная с сохраняет единичное значение (см. стр. 4).

Значение, возвращаемое функцией, можно приближённо рассматривать как значение случайной величины T , описанной в упомянутом выше разделе.

Генерация изображения: функция main()

А вот и код функции main() :

1. int main() 2. { 3. image *img = create_image(w, h); 4. double x = 0 , y = 0 ; 5. for (int i = 0 ; i < n; i++) 6. { 7. int r = get_random_value(); 8. double x1 = f[r] * x + f[r] * y + f[r]; 9. double y1 = g[r] * x + g[r] * y + g[r]; 10. x = x1; 11. y = y1; 12. set_color(img, round(x * l) + xc, round(y * l) + yc, BLACK); 13. } 14. save_to_file(img, "out.bmp" ); 15. free(img); 16. return 0 ; 17. }

Создаём изображение с заданными размерами (стр. 3). Выделяем память под переменные x и y , в которых будут храниться текущие члены последовательностей, и инициализируем их нулями (стр. 4). Напомню, что в качестве чисел x 0 и y 0 , участвующих в вычислении первых членов каждой из последовательностей, берутся нули.

Вычисляем в цикле for первые n членов каждой последовательности (стр. 5-13). Получаем сначала псевдослучайное число и записываем его в r (стр. 7). Далее вычисляем текущие значения членов обеих последовательностей, помещая их во временные переменные x1 и y1 (стр. 8, 9). При вычислении используем константы, фигурирующие в итерационных функциях и хранящиеся в массивах f и g . Выбор той или иной пары наборов коэффициентов (а значит, пары итерационных функций) зависит от значения r , использующегося в качестве первых индексов участвующих в вычислениях элементов массивов.

Переписываем вычисленные текущие значения в переменные x и y (стр. 10, 11). Координаты точки, содержащиеся в этих переменных, переводим в координаты исходной системы координат, округляем до целых и наносим точку с результирующими координатами на изображение чёрным цветом (стр. 12).

По завершении цикла сохраняем сформированное изображение в файле "out.bmp" (стр. 14) и освобождаем занимаемую изображением память (стр. 15). На этом работа функции завершается.

Построение изображения треугольника Серпиньского

Треугольник Серпиньского представляет собой множество точек, получаемого из всех точек некоторого исходного равностороннего треугольника следующим образом. Треугольник разбивается тремя средними линиями на 4 треугольника, после чего "центральный" треугольник удаляется. Далее c каждым из оставшихся трёх равносторонних треугольников выполняется та же операция. Наконец, то же самое мы делаем с получившимися девятью равносторонними треугольниками.

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

В книге Седжвика и других авторов предлагается следующий способ построения изображения треугольника Серпиньского. Рассмотрим 3 точки на плоскости, являющиеся вершинами равностороннего треугольника, например, точки с координатами 0 , 0 , 0 , 1 , 1 / 2 , 3 / 2 в декартовой прямоугольной системе координат. Выбираем наугад (с равными вероятностями) одну из трёх вершин треугольника и строим точку, делящую отрезок, соединяющий вершину с координатами 0 , 0 и выбранную наугад вершину, пополам. Это первая точка нашего изображения.

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

Нам потребуются 3 пары итерационных функций. Их индексы 0, 1, 2 должны выбираться с вероятностями 1/3, 1/3, 1/3 соответственно. Сами итерационные функции приведены ниже.

F 0 x , y = 1 / 2 x , g 0 x , y = 1 / 2 y , f 1 x , y = 1 / 2 x + 1 / 2 , g 1 x , y = 1 / 2 y , f 2 x , y = 1 / 2 x + 1 / 4 , g 2 x , y = 1 / 2 y + 3 / 4 .

Теперь давайте вставим в нашу программу описания глобальных константных переменных и константных массивов, соответствующие данным вероятностям и данным итерационным функциям. Но для начала определим макрос TRIANGLE , поместив в файл main.с после инструкции #include следующую инструкцию

#define TRIANGLE

После инструкции вставляем в файл следующий код:

//Треугольник Серпиньского #ifdef TRIANGLE const int n = 100000 ; //количество итераций const int w = 620 , h = 550 ; //размеры изображения const int xc = 10 , yc = 10 ; //координаты начала новой системы координат в старой const int l = 600 ; //коэффициент сжатия const int m = 3 ; //количество пар итерационных функций const double s = {0 , 0.3333333 , 0.6666667 }; //массив сумм вероятностей const double f = {{0.5 , 0.0 , 0.0 }, //массив коэффициентов для функций f(x,y), {0.5 , 0.0 , 0.5 }, //задействованных для вычислений x {0.5 , 0.0 , 0.25 }}; const double g = {{0.0 , 0.5 , 0.0 }, //массив коэффициентов для функций g(x,y), {0.0 , 0.5 , 0.0 }, //задействованных для вычислений y {0.0 , 0.5 , 0.4330127 }}; #endif

Приведённый фрагмент кода (без директив препроцессора) будет скомпилирован только в случае, если определён макрос TRIANGLE (а он определён). Разумеется, константы, представимые лишь с помощью бесконечных десятичных дробей (рациональных или иррациональных) мы округляли.

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

Построение изображения папоротника Барнсли

Следующее изображение, построение которого описывается в книге Седжвика и других, - это изображение папоротника Барнсли. Теперь нам уже потребуются 4 пары итерационных функций. Их индексы 0, 1, 2, 3 будут выбираться с вероятностями 0,01, 0,85, 0,07, 0,07 соответственно. А вот и сами итерационные функции:

F 0 x , y = 0 , 5 , g 0 x , y = 0 , 16 y , f 1 x , y = 0 , 85 x + 0 , 04 y + 0 , 075 , g 1 x , y = - 0 , 04 x + 0 , 85 y + 0 , 18 , f 2 x , y = 0 , 2 x - 0 , 26 y + 0 , 4 , g 2 x , y = 0 , 23 x + 0 , 22 y + 0 , 045 , f 3 x , y = - 0 , 15 x + 0 , 28 y + 0 , 575 , g 3 x , y = 0 , 26 x + 0 , 24 y - 0 , 086 .

Вносим теперь изменения в программу. Инструкцию #define заменяем инструкцией

#define FERN

А после #ifdef -блока помещаем следующий фрагмент кода:

//Папоротник Барнсли #ifdef FERN const int n = 100000 ; const int l = 600 ; const int m = 4 ; const double s = {0 , 0.01 , 0.86 , 0.93 }; const double f = {{0.0 , 0.0 , 0.5 }, {0.85 , 0.04 , 0.075 }, {0.2 , -0.26 , 0.4 }, {-0.15 , 0.28 , 0.575 }}; const double g = {{0.0 , 0.16 , 0.0 }, {-0.04 , 0.85 , 0.18 }, {0.23 , 0.22 , 0.045 }, {0.26 , 0.24 , -0.086 }}; #endif

Результатом компиляции и запуска программы является следующее изображение:

Построение изображения дерева

Теперь построим то, что в книге Седжвика и других авторов называется "деревом", хотя то, что оказывается изображённым, скорее, похоже на набор деревьев различных размеров. На этот раз в итерационном процессе будут участвовать 6 пар итерационных функций. Их индексы 0, 1, 2, 3, 4, 5 будут выбираться с вероятностями 0,1, 0,1, 0,2, 0,2, 0,2, 0,2 соответственно. Вот эти функции:

F 0 x , y = 0 , 55 , g 0 x , y = 0 , 6 y , f 1 x , y = - 0 , 05 x + 0 , 525 , g 1 x , y = - 0 , 5 x + 0 , 75 , f 2 x , y = 0 , 46 x - 0 , 15 y + 0 , 27 , g 2 x , y = 0 , 39 x + 0 , 38 y + 0 , 105 , f 3 x , y = 0 , 47 x - 0 , 15 y + 0 , 265 , g 3 x , y = 0 , 17 x + 0 , 42 y + 0 , 465 , f 4 x , y = 0 , 43 x + 0 , 26 y + 0 , 29 , g 4 x , y = - 0 , 25 x + 0 , 45 y + 0 , 625 , f 5 x , y = 0 , 42 x + 0 , 26 y + 0 , 29 , g 5 x , y = - 0 , 35 x + 0 , 31 y + 0 , 525 .

#define TREE

За последним #ifdef -блоком вставляем следующий код:

//Дерево #ifdef TREE const int n = 100000 ; const int w = 620 , h = 620 ; const int xc = 0 , yc = 10 ; const int l = 600 ; const int m = 6 ; const double s = {0 , 0.1 , 0.2 , 0.4 , 0.6 , 0.8 }; const double f = {{0.0 , 0.0 , 0.55 }, {-0.05 , 0.0 , 0.525 }, {0.46 , -0.15 , 0.27 }, {0.47 , -0.15 , 0.265 }, {0.43 , 0.26 , 0.29 }, {0.42 , 0.26 , 0.29 }}; const double g = {{0.0 , 0.6 , 0.0 }, {-0.5 , 0.0 , 0.75 }, {0.39 , 0.38 , 0.105 }, {0.17 , 0.42 , 0.465 }, {-0.25 , 0.45 , 0.625 }, {-0.35 , 0.31 , 0.525 }}; #endif

Результат работы скомпилированной программы - это изображение, приведённое ниже:

Последнее изображение, которое мы построим, руководствуясь книгой Седжвика, - это изображение коралла. Нам потребуются 3 пары итерационных функций. Их индексы 0, 1, 2 будут выбираться с вероятностями 0,4, 0,15, 0,45 соответственно. Итерационные функции приведены ниже.

F 0 x , y = 0 , 3077 x - 0 , 5315 y + 0 , 8863 , g 0 x , y = - 0 , 4615 x - 0 , 2937 y + 1 , 0962 , f 1 x , y = 0 , 3077 x - 0 , 0769 y + 0 , 2166 , g 1 x , y = 0 , 1538 x - 0 , 4476 y + 0 , 3384 , f 2 x , y = 0 , 5455 y + 0 , 0106 , g 2 x , y = 0 , 6923 x - 0 , 1958 y + 0 , 3808 .

Заменяем инструкцию #define инструкцией

#define CORAL

За последним #ifdef -блоком вставляем новый блок:

//Коралл #ifdef CORAL const int n = 100000 ; const int w = 620 , h = 620 ; const int xc = 10 , yc = 10 ; const int l = 600 ; const int m = 3 ; const double s = {0 , 0.4 , 0.55 }; const double f = {{0.3077 , -0.5315 , 0.8863 }, {0.3077 , -0.0769 , 0.2166 }, {0.0 , 0.5455 , 0.0106 }}; const double g = {{-0.4615 , -0.2937 , 1.0962 }, {0.1538 , -0.4476 , 0.3384 }, {0.6923 , -0.1958 , 0.3808 }}; #endif

Вот какое изображение получаем в результате компиляции и выполнения программы:

Заключение

Не знаю, как вам, а мне было интересно наблюдать за тем, как наборы математических формул "превращается" в весьма забавные изображения. А ещё меня удивляет то, что те, кто всё это придумали, смогли подобрать вероятности и константы, участвующие в итерационных функциях, таким образом, чтобы добиться таких удивительных картин! Методика подбора всех этих чисел (за исключением случая треугольника Серпиньского) мне совершенно непонятна!

Отмечу, что, судя по изображениям, треугольник Серпиньского и папоротник Барнсли являются фракталами. Скорее всего, то же самое можно сказать про "дерево" и "коралл", но их фрактальная природа, пожалуй, чуть менее очевидна.

По приведённой ниже ссылке, как всегда, можно скачать исходный код рассмотренной в статье программы. В файле main.c имеются четыре инструкции #define , каждая из которых соответствует одному из четырёх изображений. Три из них закомментированы. Ясно, что для того, чтобы перейти от одного изображения к другому, требуется закомментировать незакомментированную инструкцию и раскомментировать одну из закомментированных. Ну, Вы поняли...

А ещё с помощью несложного алгоритма можно добиться того, чтобы рассмотренные в статье изображения плавно "превращались" друг в друга. Но это уже тема для отдельной статьи .