Проект
«Создание
приложения в Microsoft Visual Studio
для отображения правильных многогранников»
Разработал: учитель
информатики МОБУ СОШ с.Наумовка
Сергиенко
Павел Николаевич
2016
год
План.
Введение
1. Платоновы тела.
Общая информация 4 стр
2. Перечень
Платоновых тел и их характеристик 7 стр
3. Построение «Платоновых» тел 8
стр
4. Вычисление параметров для построения
изображения
Платоновых тел. 13
стр
5.
Пример расчёта вершин и отрисовки куба
на
заданной поверхности. 18
стр
6.
Заключение 21
стр
7.
Использованная литература 22
стр
Введение
С
точки зрения моделирования и 3D моделирования
достаточно интересным является вопрос изображения 3х мерных тел на плоскости.
Понимание основных принципов отображения 3х мерных тел на плоскости позволит на
начальном уровне понять, каким образом работают, например 3D
редакторы, или формируется игровое пространство. Я заинтересовался этим
вопросом, в результате чего была выполнена данная работа.
В
качестве объекта для изучения я выбрал 5 правильных многогранников, так
называемых Платоновых тел.
Цель:
научиться отображать Платоновы тела на плоскости. Создать приложение,
выполняющее построение данных тел, которое можно будет использовать в качестве
иллюстрации, например на уроках геометрии.
Задачи:
изучить информацию о Платоновых телах используя доступную литературу
и источники в Сети
ознакомиться
со способами построения Платоновых тел на плоскости
создать
приложение выполняющее построение Платоновых тел
Платоновы тела
Идея симметрии часто являлась отправным пунктом в
гипотезах и теориях ученых прошлых веков, веривших в математическую гармонию
мироздания и видевших в этой гармонии проявление божественного начала.
Существование только пяти правильных многогранников представлялось им
фундаментальным фактом, который должен иметь прямое отношение к строению
материи и Вселенной.
Еще во времена древних греков был установлен
поразительный факт - существует всего пять правильных выпуклых многогранников
разной формы. Впервые исследованные пифагорейцами, эти пять правильных
многогранников были впоследствии подробно описаны Платоном и стали называться в
математике Платоновыми телами.
Правильные
многогранники характерны для философии Платона, в честь которого и получили
название. Платон писал о них в своём трактате Тимей (360г до н. э.), где
сопоставил каждую из четырёх стихий (землю, воздух, воду и огонь) определённому
правильному многограннику. Земля сопоставлялась кубу, воздух — октаэдру, вода —
икосаэдру, а огонь — тетраэдру. Для возникновения данных ассоциаций, были
следующие причины: жар огня ощущается чётко и остро (как маленькие тетраэдры);
воздух состоит из октаэдров: его мельчайшие компоненты настолько гладкие, что
их с трудом можно почувствовать; вода выливается, если её взять в руку, как
будто она сделана из множества маленьких шариков (к которым ближе всего
икосаэдры); в противоположность воде, совершенно непохожие на шар кубики
составляют землю, что служит причиной тому, что земля рассыпается в руках, в
противоположность плавному току воды. По поводу пятого элемента, додекаэдра,
Платон сделал смутное замечание: «…его бог определил для Вселенной и прибегнул
к нему в качестве образца». Аристотель добавил пятый элемент — эфир и
постулировал, что небеса сделаны из этого элемента, но он не сопоставлял его
платоновскому пятому элементу.
Зашифрованная в пяти Платоновых телах идея симметрии
увлекла знаменитого немецкого астронома конца XVI — начала XVII века Иоганна
Кеплера, пытавшегося объяснить, почему в Солнечной системе имеются именно шесть
планет (во времена Кеплера, как и во времена Пифагора, были известны только
шесть планет) и почему радиусы их «сфер» (орбит) относятся как
8:15:20:30:115:195 (согласно результатам, полученным Кеплером). Взяв сферу Сатурна,
Кеплер вписал в нее куб. Затем в этот куб он вписал следующую сферу — сферу
Юпитера. В сферу Юпитера был вписан тетраэдр, а в тетраэдр — сфера Марса. В
сферу Марса Кеплер вписал додекаэдр, а в него — сферу Земли. Затем шли
последовательно икосаэдр, вписанный в сферу Земли, сфера Венеры, октаэдр,
вписанный в сферу Венеры, и, наконец, сфера Меркурия. Легко видеть, что в схеме
Кеплера использованы все пять Платоновых тел; часть этой схемы изображена на
рисунке. Вычислив в соответствии со своей схемой радиусы планетных сфер, Кеплер
обнаружил, что отношения этих радиусов хорошо согласуются с данными,
полученными из наблюдений. Это удивительное совпадение заставило Кеплера
поверить в правильность исходной идеи. Он полагал, что ему удалось объяснить
строение всей Солнечной системы на основе единой геометрической схемы,
использующей сферы и пять Платоновых тел. Существование именно шести планет
Кеплер ставил при этом в прямую связь с существованием пяти Платоновых тел.
«Огромную радость, которую я испытал от этого открытия, нельзя выразить
словами, — писал Кеплер. — Я уже не жалел о потраченном времени и не испытывал
усталости. Я не боялся трудных расчетов, стремясь выяснить, соответствует ли
моя гипотеза теории орбит Коперника, или же моя радость должна рассеяться как
дым».
Радость Кеплера оказалась преждевременной.
Обнаруженное им совпадение отношений радиусов планетных орбит с отношениями,
полученными из схемы с правильными многогранниками, было случайным и, как
показали более поздние наблюдения, весьма приближенным. К тому же число планет
в Солнечной системе в действительности равно не шести, а девяти.
Перечень
Платоновых тел и их характеристики
Додекаэдр
(от греческого dodeka – двенадцать и hedra – грань) это правильный
многогранник, составленный из двенадцати равносторонних пятиугольников.
Додекаэдр
имеет 20 вершин и 30 ребер.
Вершина
додекаэдра является вершиной трех пятиугольников, таким образом, сумма плоских
углов при каждой вершине равна 324°.
Сумма
длин всех ребер 30а.
Додекаэдр
имеет центр симметрии и 15 осей симметрии.
Каждая
из осей проходит через середины противолежащих параллельных ребер. Додекаэдр
имеет 15 плоскостей симметрии. Любая из плоскостей симметрии проходит в каждой
грани через вершину и середину противоположного ребра.
Тетраэдр
(греч. τετραεδρον — четырёхгранник) — многогранник с четырьмя треугольными
гранями, в каждой из вершин которого сходятся по 3 грани. У тетраэдра 4 грани,
4 вершины и 6 рёбер.
Параллельные
плоскости, проходящие через пары скрещивающихся рёбер тетраэдра, определяют
описанный около тетраэдра параллелепипед.
Тетраэдры
в микромире:
Вода,
Лёд.
Молекула
метана
Молекула
аммиака
Алмаз
C - тетраэдр с ребром равным 2,5220 ангстрем
Флюорит,
тетраэдр с ребром равным 3, 8626 ангстрем
Сфалерит,
ZnS, тетраэдр с ребром равным 3,823 ангстрем
Куб
или правильный гексаэдр — правильный
многогранник, каждая грань которого представляет собой квадрат. Частный случай
параллелепипеда и призмы.
Свойства
куба
Четыре
сечения куба являются правильными шестиугольниками — эти сечения проходят через
центр куба перпендикулярно четырём его главным диагоналям.
В
куб можно вписать тетраэдр двумя способами. В обоих случаях четыре вершины
тетраэдра будут совмещены с четырьмя вершинами куба и все шесть рёбер тетраэдра
будут принадлежать граням куба. В первом случае все вершины тетраэдра
принадлежат граням трехгранного угла, вершина которого совпадает с одной из
вершин куба. Во втором случае попарно скрещивающиеся ребра тетраэдра
принадлежат попарно противолежащим граням куба. Такой тетраэдр является правильным.
В
куб можно вписать октаэдр, притом все шесть вершин октаэдра будут совмещены с
центрами шести граней куба.
Куб
можно вписать в октаэдр, притом все восемь вершин куба будут расположены в
центрах восьми граней октаэдра.
В
куб можно вписать икосаэдр, при этом шесть взаимно параллельных рёбер икосаэдра
будут расположены соответственно на шести гранях куба, остальные 24 ребра —
внутри куба. Все двенадцать вершин икосаэдра будут лежать на шести гранях куба.
В
микромире
В
форме куба кристаллизуется поваренная соль, флюорит и другие вещества.
Октаэдр
(греч. οκτάεδρον, от греч. οκτώ, «восемь» и греч. έδρα — «основание») — один из
пяти выпуклых правильных многогранников, так называемых, Платоновых тел.
Октаэдр
имеет 8 треугольных граней, 12 рёбер, 6 вершин, в каждой его вершине сходятся 4
ребра.
Октаэдр
в природе
Многие
природные кубические кристаллы имеют форму октаэдра. Это алмаз, хлорид натрия,
перовскит, оливин, флюорит, шпинель.
Форму
октаэдра имеют межатомные пустоты (поры) в плотноупакованных структурах чистых
металлов (никеле, меди, магнии, титане, лантане и многих других) и ионных
соединений (хлорид натрия, сфалерит, и др.).
Икосаэдр
(от греч. εικοσάς — двадцать; -εδρον — грань, лицо,
основание) — правильный выпуклый многогранник, двадцатигранник, одно из
Платоновых тел. Каждая из 20 граней представляет собой равносторонний
треугольник. Число ребер равно 30, число вершин — 12.
Свойства.
Икосаэдр можно вписать в куб, при этом, шесть взаимно перпендикулярных рёбер
икосаэдра будут расположены соответственно на шести гранях куба, остальные 24
ребра внутри куба, все двенадцать вершин икосаэдра будут лежать на шести гранях
куба
В
икосаэдр может быть вписан тетраэдр, притом, четыре вершины тетраэдра будут
совмещены с четырьмя вершинами икосаэдра.
Икосаэдр
можно вписать в додекаэдр, при этом вершины икосаэдра будут совмещены с
центрами граней додекаэдра.
В
икосаэдр можно вписать додекаэдр с совмещением вершин додекаэдра и центров
граней икосаэдра.
Усечённый
икосаэдр может быть получен срезанием 12 вершин с образованием граней в виде
правильных пятиугольников. При этом число вершин нового многогранника
увеличивается в 5 раз (12×5=60), 20 треугольных граней превращаются в
правильные шестиугольники (всего граней становится 20+12=32), а число рёбер
возрастает до 30+12×5=90.
Построение «Платоновых» тел
В своей программе для построения Платоновых
тел я воспользовался способом, предложенным М.Степановым в статье «Единый
методический подход к задачам на построение сложных компьютерных изображений».
В данной статье был предложен общий способ построения n-угольного призматоида, и рассмотрены идеи построения Платоновых тел.
Выбор оси вращения
Основным
инструментом при построении Платоновых тел являются круговые траектории, заметаемые вершинами многогранника при вращении вокруг некоторой оси. Оси, не проходящие через
центр описанного вокруг многогранника
шара, следует сразу же отбросить. Таким
образом, для определения положения
оси достаточно указать помимо центра шара еще одну принадлежащую ей
точку. После этого вершины разделятся на группы, каждая из которых принадлежит одной круговой траектории, образуемой сечением шара плоскостью, перпендикулярной оси и изображаемой на рисунке в виде эллипса. Рассмотрим три варианта выбора оси:
1.Ось проходит через середину ребра (тетраэдр).
2.Ось проходит через вершину (куб, икосаэдр).
3.Ось
проходит через центр грани (октаэдр, додекаэдр).
Плоскости, в которых лежат траектории: вершин, рассекают Платоновы тела на уже знакомые нам многогранники, открывая путь к построению нужных изображений.
1. Тетраэдр - двуугольный призматоид
2.Октаэдр - треугольный призматоид.
3.Куб -
треугольный призматоид + 2 треугольные пирамиды.
4.Икосаэдр - пятиугольный призматоид + 2 пятиугольные пирамиды.
5.Додекаэдр - пятиугольный призматоид + 2 усеченные пятиугольные пирамиды.
Метрические соотношения для Платоновых тел
Высоты пирамид и призматоидов, радиусы эллипсов не могут быть выбраны произвольно, так как внешний вид многогранника исказится. Нужно выразить все расстояния, характеризующие многогранник, через одну исходную величину. В качестве таковой мы возьмем диаметр описанного шара.
В
процессе вычислений мы будем использовать известную формулу, выражающую зависимость между радиусом окружности и стороной вписанного в нее многоугольника:
an=2*r*sinπ/n.
Все вычисления и их результаты приведены ниже.
Порядок построения многогранников, общий для всех Платоновых тел будет таким:
1.Выбрать величины ХО, YO, D, задающие положение и длину вертикальной оси вращения.
2.Вычислить координаты центров эллипсов и их большие полуоси (радиусы).
3.Произвести вычисление и сохранение в массивах координат вершин многогранника. При этом следует учесть тот факт, что все вершины, лежащие выше центра шара, сдвинуты относительно вершин, лежащих ниже центра шара.
Вычисление
параметров для построения изображения Платоновых тел.
Тетраэдр
Порядок вычислений:
r1=L/2
b4=2*r1*sin π/4=L/√2
h1=√L2-b42=L/√2
D=√4r12+h12=√2/3*L
Результаты:
L=√2/3*D;
r1=L/2;
h1=L/√2
Октаэдр
Порядок вычислений:
a3=L
r1=a3/2sin π/3=L/√3
b6=2*r1*sin π/6=L/√3
h1=√L2-b62=L/√2
D=√4r12+h12=√2*L
Результаты:
L=D/√2;
r1=L/√3;
h1=√2/3*L
Куб
Порядок вычислений:
a3=√2*L
r1=a3/2sin π/3=√2/3*L
b6=2*r1*sin π/6=r1
h1=√L2-r12=L/√3
D=2h1+h2=√3*L
Результаты:
L=D/√3;
r1=L*√2/3;
h1=h2=D/3
Икосаэдр
Порядок вычислений:
a5=L
r1=L/2sin π/5≈0,85*L
b10=2*r1*sin π/10≈0,525*L
h1=√L2-r12≈0,525*L
h2=√L2-b102≈0,85*L
D=√4r12+h12≈1,9*L
Результаты:
L=0,525D;
h1=0,525DL;
h2=0,85L;
r1 =0,85L
Додекаэдр
Порядок вычислений:
a5=L
r1=L/2*sin π/5≈0,85*L
b5=2*L*sin 3π/10≈1,62*L
r2=b5/2*sin π/5≈1,38*L
h1=√L2-(r2-r1)2≈0,85*L
c10=2*r2*sin π/10≈0,85*L
h2=√L2-c102≈0,525*L
D=√4r22+h22≈2,8*L
Результаты: L=0,356*D;
h1=0,85*L;
h2=0,525*L;
r1
=0,85*L;
r2
=1,38*L
Данные
рассуждения я использовал при написании программы отображающей Платоновы тела.
Программа создана с использованием среды разработки Microsoft Visual Studio
2008.
Был
создан абстрактный базовый класс для отображения любых Платоновых тел. Далее
были созданы производные классы для построения конкретных тел. В этих классах
реализованы методы для расчёта координат вершин многогранника и отрисовки его
рёбер.
Пример расчёта вершин и
отрисовка куба на заданной поверхности.
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Drawing;
namespace ScinceWork
{
#region Класс представляющий тело
"Куб"
/// <summary>
/// Класс представляющий тело
"Куб"
/// </summary>
public class Cube : AbsSolid
{
#region объявление
переменных
/// <summary>
/// Шаг с которым расположены
вершины многоугольника, на описываемом вокруг него эллипсе
/// </summary>
private double DU;
/// <summary>
/// Длина ребра
"платоновского" тела
/// </summary>
private double L;
/// <summary>
/// Расстояние между верхней
точкой, описанного шара, и плоскостью, в которой лежат описываемые эллипсы
/// </summary>
private double H1;
/// <summary>
/// Расстояние между
плоскостями, в которых лежат 2 описываемых эллипса
/// </summary>
private double H2;
/// <summary>
/// Большая полуось эллипса
/// </summary>
private double R1;
///
<summary>
/// Координата центра, описанного
вокруг многоугольника, 1-го эллипса по оси OY
/// </summary>
private double Y1;
/// <summary>
/// Координата центра, описанного
вокруг многоугольника, 2-го эллипса по оси OY
/// </summary>
private double Y2;
/// <summary>
/// Координаты вершин
многоугольников, принадлежащих эллипсам, по оси OX
/// </summary>
private int[] XL = new int[6];
///
<summary>
/// Координаты вершин
многоугольников, принадлежащих эллипсам, по оси OY
/// </summary>
private int[] YL = new int[6];
#endregion
#region определение методов
/// <summary>
/// Конструктор куба
/// </summary>
/// <param
name="Centre">координаты центра, описанного вокруг додекаэдра,
шара</param>
/// <param
name="D">диаметр, описанного вокруг додекаэдра, шара</param>
public Cube(Point Centre, int D)
: base(Centre, D)
{
this.DU = AbsSolid.pi / 3;
}
/// <summary>
/// Метод выполняющий вычисление
координат вершин куба
/// </summary>
private void Calculate()
{
//вычисление начальных данных
this.L = D * 0.577;
this.H1 = D / 3;
this.H2 = D / 3;
this.R1 = L * 0.816 * this.Kx;
this.Y1 = (this.Centre.Y -
this.D / 2) + H1;
this.Y2 = Y1 + H2;
int I = 0;
double YY = 0;
double gr = A0 + 2 *
AbsSolid.pi;
for (double UG = A0; UG <
gr; )
{
//вычисление координат
вершин многоугольников, принадлежащих эллипсам
XL[I] = (int)(this.Centre.X
+ R1 * Math.Cos(UG));
YL[I] = (int)(Y1 - this.Ky
* R1 * Math.Sin(UG));
YY = Y1;
Y1 = Y2;
Y2 = YY;
UG = UG + DU;
I = I + 1;
}
}
/// <summary>
/// Метод для отрисовки куба
/// </summary>
/// <param
name="Canvas">поверхность отрисовки</param>
/// <param
name="Pn">перо для отрисовки</param>
public override void
DrawSolid(Graphics Canvas, Pen Pn)
{
int I;
this.Calculate();
I = 0;
for (I = 0; I <= 4; I = I +
2)
{
if (I != 4)
{
Canvas.DrawLine(Pn,
XL[I], YL[I], this.Centre.X, (this.Centre.Y - this.D / 2));
Canvas.DrawLine(Pn,
XL[I], YL[I], XL[I + 1], YL[I + 1]);
}
else
{
Canvas.DrawLine(Pn,
XL[I], YL[I], this.Centre.X, (this.Centre.Y - this.D / 2));
Canvas.DrawLine(Pn,
XL[I], YL[I], XL[I + 1], YL[I + 1]);
}
}
I = 1;
for (I = 1; I <= 5; I = I +
2)
{
if (I != 5)
{
Canvas.DrawLine(Pn,
XL[I], YL[I], this.Centre.X, (this.Centre.Y + this.D / 2));
Canvas.DrawLine(Pn,
XL[I], YL[I], XL[I + 1], YL[I + 1]);
}
else
{
Canvas.DrawLine(Pn,
XL[I], YL[I], this.Centre.X, (this.Centre.Y + this.D / 2));
Canvas.DrawLine(Pn,
XL[I], YL[I], XL[I - 5], YL[I - 5]);
}
}
}
#endregion
}
#endregion
}
Заключение
Данная
тема может быть использована при изучении программирования в 9 – 11 классах.
Этот проект демонстрирует принципы построения трехмерных тел, получить
начальные навыки работы со средой программирования Microsoft Visual Studio 2008
и создать приложение демонстрирующее Платоновы тела.
Используемая
литература
1.
М.Степанов. Единый методический подход к задачам на построение сложных
компьютерных изображений. Информатика и образование 1/1993
2.
Си
Шарп: Создание приложений для Windows/ В. В. Лабор.— Мн.: Харвест, 2003.
3.Справочные
материалы Microsoft
Visual Studio 2008
4.
Материалы свободной энциклопедии Википедия
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.