русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Создание шедевров


Дата добавления: 2015-07-23; просмотров: 679; Нарушение авторских прав


Будем брать точки все на той же нашей окружности, ставить в них иголку циркуля и рисовать новые окружности так, чтобы они все проходили через все ту же фиксированную точку на окружности. Общая огибающая (так называемая энвелопа) к полученным окружностям будет конечно, все уже догадались кардиоидой. А при смещении фиксированной точки получим всю гамму Улиток Паскаля. Этот процесс иллюстрирует картинка и программа, нарисовавшая ее. Маленькими черными кружками отмечены лежащие на исходной окружности точки центры проводимых окружностей. Здесь а смешение фиксированной точки для ваших экспериментов, пока равно нулю. Главное в этой программе посчитать радиус рисуемой в каждой точке цикла окружности, хотя для этого достаточно теоремы Пифагора, надо только уметь ее применить к месту. Как вы уже заметили, расцветка красивая, цвет окружностей меняется в течение цикла. Достаточно всего лишь уменьшить шаг цикла и мы получим красивую картину.

Form1.ScaleMode = vbPixels Cls pi = 4 * Atn(1) scal = 15 r = 90 a = 0 * r DrawWidth = 3 ' попробуйте уменьшить шаг For f = 1 To 360 Step 18 t = f * pi / 180 + pi x = r * (1 + Cos(t)) y = r * Sin(t) rr = Sqr((x - a) ^ 2 + y ^ 2) red = 255 - 0.6 * f green = 0.6 * f blue = Abs(Int(0.0005 * f * (360 - f))) ^ 2 col = RGB(red, green, blue) Circle (190 + x, 250 + y), rr, col Circle (x + 190, y + 250), 4, RGB(0, 0, 0) Next f

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

Form1.ScaleMode = vbPixels Cls pi = 4 * Atn(1) scal = 5 r = 88 a = 0 * r DrawWidth = 55 For f = 1 To 360 Step 17 t = f * pi / 180 + pi x = r * (1 + Cos(t)) y = r * Sin(t) rr = Sqr((x - a) ^ 2 + y ^ 2) If f Mod 2 = 0 Then col = RGB(255, 255, 10) Else: col = RGB(0, 0, 0) End If Circle (190 + x, 260 + y), rr, col Next f

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



Текущий центральный угол нам выделять не надо мы и так от него в цикле все и строим. Единственный технический момент нахождение точки пересечения окружности и линии, проходящей через фиксированную точку (параллельно радиусу, проведенному в текущую точку). Для нахождения координат точки пересечения линии, проходящей через фиксированную точку и окружности, надо совместно решить их уравнения. Уравнение линии y=kx+b, причем b=0 так как точка лежит на оси x, а k=tan(t), где t угол наклона линии в радианах. А уравнение окружности (x-r)2+y2=r2 так как центр сдвинут на величину r относительно начала координат, проходящего через фиксированную точку. Исключив y и решив относительно x, получим x=2r/(1-k2). Подставив это значение в уравнение линии, получим y точки на круге. А уж зная координаты двух точек найти координаты середины соединяющего их отрезка совсем просто они равны полусумме координат точек. Все это и реализовано в приведенной программе.

Form1.ScaleMode = vbPixels Cls pi = 4 * Atn(1) R = 200 DrawWidth = 2 Circle (190 + R, 250), R, RGB(0, 0, 200) x3 = 2 * R: y3 = 0 For f = 1 To 360 Step 6 t = f * pi / 180 x = R * (1 + Cos(t)) y = R * Sin(t) k = Tan(t) X1 = 2 * R / (1 + k ^ 2) Y1 = k * X1 X2 = (X1 + x) / 2: Y2 = (Y1 + y) / 2 DrawWidth = 2 Circle (X1 + 190, Y1 + 250), 4, RGB(0, 0, 250) Circle (x + 190, y + 250), 4, RGB(0, 205, 0) Circle (X2 + 190, Y2 + 250), 4, RGB(250, 0, 0) Line (X2 + 190, Y2 + 250)-(x3 + 190, y3 + 250), RGB(250, 0, 0) DrawWidth = 1 Line (190, 250)-(X1 + 190, Y1 + 250), RGB(0, 0, 250) Line (190 + R, 250)-(x + 190, y + 250), RGB(0, 205, 0) x3 = X2: y3 = Y2 Next f

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



<== предыдущая лекция | следующая лекция ==>
Педальная кривая | Паутина


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.454 сек.