Гипотрохоида как построить в excel
Данная программа предназначена для построения графика гипотрохоиды с изменяемыми параметрами. Для управления графиком присутствуют такие функции как: изменение скорости отрисовки, увеличение и уменьшение масштаба графика, перемещение вдоль осей X и Y и сохранение изображения графика в формате BMP.
Формализованная постановка задачи.
1.4. График гипотрохоиды, ее параметрическое уравнение;
где k=R/r; R-радиус неподвижной окружности; r-радиус катящейся окружности; h-расстояние от центра катящейся окружности до точки, образующей траекторию.
k-произвольное; h=0…R, t >2*PI.
Обеспечить кроме ручного ввода t автоматический расчет этого параметра для k=m/n (m и n-целые), обеспечивающего рисование замкнутого графика.
Разработка приложения.
Данное приложение запускается через ярлык MFCApplication и открывает окно для построения графика. В окне находятся параметры, которые пользователь может менять. К параметрам прикреплены переменные double m_R, m_r, m_h, m_a, m_X, m_Y; прописанные в MyCalc .h. Привязка окон ввода к переменным осуществляется при помощи функции GetDlgItem.
В CMyCalc в теле цикла происходит вычисление точек графика.
Условие замкнутости графика вытекает из следующего равенства R*n == r*m. Для
Расчёта организована система из вложенных циклов, сначала подбирается n (внешний
цикл), далее m, потом внутри проверяется выполнение условия, выход из циклов
осуществляется, когда булевская переменная принимает значение true с
помощью break цикл останавливается. Вычисленные точки передаются в класс CMyGraph. Класс СMyGraph сначала заливает окошко цветом, затем с помощью функций dc.LineTo() и dc.MoveTo() выполняет рисование осей. Затем с помощью четырех циклов for выполняется разлиновка осей, отчет начинается от центра, а дальше вправо, влево, вверх и вниз через каждые 20 пикселей до конца окошка ставятся деления. Далее можно произвести сохранение графика в формате BMP
Рассмотрим Гипергеометрическое распределение, вычислим его математическое ожидание, дисперсию, моду. С помощью функции MS EXCEL ГИПЕРГЕОМ.РАСП() построим графики функции распределения и плотности вероятности. Приведем пример аппроксимации гипергеометрического распределения биномиальным.
Определение . Рассмотрим совокупность, состоящую из N элементов. Известно, что элементы в этой совокупности принадлежат разным классам, например, часть элементов зеленого цвета, другая часть – красного, третья – черного и т.д. Нас интересует только определенный класс элементов, например, только зеленые элементы. Известно, что в нашей совокупности содержится D элементов интересующего нас класса (D ГИПЕРГЕОМ.РАСП() , английское название - HYPGEOM.DIST(), которая позволяет вычислить не только вероятность того, что в выборке будет х нужных нам элементов ( функцию плотности вероятности ), но и интегральную функцию распределения (вероятность того, что в выборке будет не меньше x нужных нам элементов).
До MS EXCEL 2010 в EXCEL была только функция ГИПЕРГЕОМЕТ() , которая позволяла вычислить только плотность вероятности. ГИПЕРГЕОМЕТ() оставлена в MS EXCEL 2010 только для совместимости. Для пользователей MS EXCEL 2007 и более ранних – в файле примера приведена формула для расчета интегральной функции распределения на основе функции ГИПЕРГЕОМЕТ() .
В файле примера приведены графики плотности распределения вероятности и интегральной функции распределения .
Примечание : Для построения интегральной функции распределения идеально подходит диаграмма типа График , для плотности распределения – Гистограмма с группировкой . Подробнее о построении диаграмм читайте статью Основные типы диаграмм .
В файле примера приведены различные расчеты вероятности:
Как видно на картинке выше, для расчета предполагается, что:
- совокупность, из которой делается выборка, состоит из 100 элементов (N, четвертый аргумент функции ГИПЕРГЕОМ.РАСП() ).
- Всего в этой совокупности содержится 5 элементов интересующего нас класса, например, «годных» элементов (D, третий аргумент функции).
- Чтобы вычислить вероятность, того что в выборке из 10 элементов (n, второй аргумент функции) будет 2 элемента из интересующего нас класса (первый аргумент функции), нужно записать формулу: =ГИПЕРГЕОМ.РАСП(2;10;5;100;ЛОЖЬ)
- Последний, пятый элемент, установлен =ЛОЖЬ, т.е. возвращается значение функции плотности распределения .
Если значение пятого аргумента =ИСТИНА, то функция ГИПЕРГЕОМ.РАСП() возвращает значение интегральной функции распределения или просто Функцию распределения . В этом случае можно рассчитать вероятность того, что в выборке количество «годных элементов» будет из определенного диапазона, например, 2 или меньше (включая 0). Для этого нужно записать формулу: =ГИПЕРГЕОМ.РАСП(2;10;5;100;ИСТИНА)
Примечание : При нецелом значении х, дробная часть отбрасывается . Например, следующие формулы вернут одно и тоже значение:
ГИПЕРГЕОМ.РАСП( 2 ;10;5;100;ИСТИНА) = ГИПЕРГЕОМ.РАСП( 2,9 ;10;5;100;ИСТИНА)
Чтобы вычислить вероятность того, что в выборке окажется 1, 2 или 3 «годных» элемента нужно записать выражение: =ГИПЕРГЕОМ.РАСП(3;10;5;100;ИСТИНА)- ГИПЕРГЕОМ.РАСП(0;10;5;100;ИСТИНА) или
=ГИПЕРГЕОМ.РАСП(1;10;5;100;ЛОЖЬ)+ +ГИПЕРГЕОМ.РАСП(2;10;5;100;ЛОЖЬ)+ +ГИПЕРГЕОМ.РАСП(3;10;5;100;ЛОЖЬ)
Примечание : В файле примера плотность вероятности и функция распределения также вычислены с использованием определения и функции ЧИСЛКОМБ() .
Примечание : Для удобства написания формул в файле примера созданы Имена для параметров Гипергеометрического распределения : n, D и N.
Показатели распределения
В файле примера на листе График имеются формулы для расчета:
- математического ожидания =n*D/N,
- дисперсии (квадрата стандартного отклонения) =n*D/N*(1-D/N)*((N-n)/(N-1)),
- моды =(D+1)*(n+1)/(N+2)
- коэффициента асимметрии .
Аппроксимация Биноминальным распределением
В случае, когда размер совокупности N гораздо больше размера выборки n (т.е., N >> n или n/N СОВЕТ : О других распределениях MS EXCEL можно прочитать в статье Распределения случайной величины в MS EXCEL .
Для начинающих пользователей EXCEL советуем прочитать статью Основы построения диаграмм в MS EXCEL , в которой рассказывается о базовых настройках диаграмм, а также статью об основных типах диаграмм .
При попытке построить диаграмму типа Поверхность на основе одного ряда данных, MS EXCEL может сказать, что ему требуется как минимум 2 ряда. На самом деле, для более или менее наглядной поверхности потребуется как минимум 10 рядов (лучше 20 – для сложных поверхностей). К счастью, ряды не нужно создавать в ручную – достаточно правильно сформировать таблицу с исходными данными.
Построим график функции z=-sin(x*х+y*y)+1 (см. файл примера ).
В качестве источника данных используем таблицу, в которой в верхней строке указаны значения Х, а в левом столбце Y. В остальных ячейках – значения Z для всех пар (Х,Y)
Чтобы значения Z были более информативны - можно использовать Условное форматирование .
Условное форматирование показывает некий вариант изолиний (см. ниже): близкие значения Z выделены одним цветом. Это также позволяет предварительно оценить вид создаваемой диаграммы.
Теперь выделите любую ячейку таблицы и постройте диаграмму типа Поверхность (вкладка Вставка , группа Диаграммы , Кнопка Другие ).
Полученную фигуру можно повращать (кнопка Поворот объемной фигуры на вкладке Макет ).
Для построения диаграммы используется 3 оси: горизонтальная ось (категорий), вертикальная ось (значений), ось Z (рядов значений). Все 3 названия осей требуют пояснения.
Во-первых, ось Z на самом деле является нашей осью Х и отображает имена рядов. Если имена рядов убрать, то изменятся и подписи оси (убрать имена рядов можно нажав кнопку Изменить в окне Выбор источника данных , которое доступно через вкладку Конструктор ).
Этот факт роднит диаграмму Поверхность с Диаграммой График , где по Х отображаются лишь подписи. Т.е. при попытке построить поверхность с неравномерным шагом по Х (например, 1, 2, 5, 9, 77, 103, ..) получим искажения масштаба: значения по Х будут откладываться последовательно 1, 2, 3, … (конечно, Z будет рассчитаны правильно). Интересно, что формат подписей по оси Z можно настроить только изменяя формат ячеек, на которые ссылаются имена рядов (изменение формата на вкладке Число (в окне Формат Оси) ни к чему не приводит).
Во-вторых, по вертикальной оси (значений) на самом деле откладываются значения Z (это очевидно из рисунка).
И, наконец, в-третьих, горизонтальная ось (категорий) – это значения Y (на самом деле опять только подписи). Подписи, как и для Графика можно удалить или изменить нажав кнопку Изменить в окне Выбор источника данных , которое доступно через вкладку Конструктор (на этот раз нужно нажать кнопку расположенную справа).
Так как диаграмма Поверхность – это по сути трехмерный График , в котором одному Х соответствует один Y, то некоторые объемные фигуры отобразить на диаграмме Поверхность не удастся. Например, не удастся отобразить гиперболоид, т.к. каждой паре (Х;Y) на диаграмме Поверхность соответствует только один Z, а для гиперболоида это не так (каждой паре соответствует 2 значения Z). Поэтому, в MS EXCEL придется довольствоваться только половиной гиперболоида.
Как видно из диаграммы, близкие значения Z выделены одним цветом, которые указаны в Легенде. К сожалению, в MS EXCEL невозможно управлять этими уровнями (даже при повороте фигуры количество уровней и диапазоны значений существенно изменяются). Это приводит к тому, что построение изолиний ( линии уровня, контурный график, англ. Contour plot ) реализовано в MS EXCEL в достаточно ограниченном виде: невозможно указать на диаграмме значение изолинии (диапазоны цветов указаны на Легенде), разбиение на диапазоны по Z производится MS EXCEL автоматически и нет возможности на это повлиять. Ниже приведены изолинии для упомянутого выше гиперболоида. Это особый вид диаграммы – Проволочная контурная .
Практически такой же картинки можно добиться простым поворотом фигуры на диаграмме Поверхность .
Где k=R/r; R - радиус неподвижной окружности, r - радиус катящейся окружности, h - растояние от центра катящейся окружности до точки, образующей траекторию.
k - произвольное, h = 0. R, t > 2*PI
Обеспечить кроме ручного ввода t автоматический расчёт этого параметра для k = m/n (m,n - целые), обеспечивающего рисование замкнутого графика.
Собственно, сама программа не вызывает особых трудностей, а обратиться к вам решил потому, что возникает много вопросов по параметрическим уравнениям.
Покурив мануалов вот ЗДЕСЬ пришёл к выводу, что в уравнении для Y должен стоять минус, ибо если точка движется по часовой, то внутренняя окружность будет катиться против часовой, а в задании я минуса не наблюдаю.
В итоге прошу знающих людей, если не сложно, разъяснить этот момент ну и всё же помочь с кодом.
Заранее огромное спасибо!
Нужно построить график функции y = x2 на интервале [-3,3] и Построить график функции (эллипс) x^2/16 + y^2/9 = 1
Нужно построить график функции y = x2 на интервале и Построить график функции (эллипс) x^2/16 +.
Построить график функции y=x^2. График строится из отрезков и алгоритма Брезенхема
Построить график функции y=x^2. График строится с помощью отрезков. Для построения отрезков.
Составить график функции. Дана функция нужно построить график по полученным точкам
Помогите составить график функции. Дана функция нужно построить график по полученным точкам.
Построить график экспоненты, декартов график в логарифмической шкале
построить график е в степени х,декартовый график в логорефмичной шкале.
С кодом помочь могу.Просмотри.
Что касается остального, то вряд ли. Если я правильно понял, тебе нужно задать максимальное значение t, при котором точка вернется в свое первоначальное положение, как раз получится замкнутая траектория. Но решить эту задачу очень сложно. Точнее говоря очень легко. Тебе нужно взять 1 любое из этих двух уравнений, например первое. Считай Х=const. И ты получаешь элементарное уравнение относительно t. Его решение будет иметь вид : f(X, Pi*N). Берешь N=1 и умножаешь его на 2 ( т.к. координата X повторяется дважды при 1 полном обороте). И ты получаешь tmax.
Единственная загвоздка - как решить это уравнение. Пробовал решить его через gпрограмму Maple, но он выдает что-то непонятное:
RootOf|_Z k - _Z - Pi + arccos((r cos(_Z) k - r cos(_Z) - X)/h);
где непонятно, что такое Z,
так что не знаю.
Вроде бы так.
За код огромное спасибо
Внести пару изменений и будут именно то, что мне надо, с этим я уже сам справлюсь)
А с вопросом Вы меня поняли не совсем правильно. Находжение t описано по ссылке которую я привёл, если интересно то почитайте, я с этим уже разобрался на уровне математики
Меня интересовало именно параметрическое уравнение по Y, т.е. косяк или всё же нет? Судя по готовой программе нет, значит дальше уже буду экспериментировать и разбираться самостоятельно, я считал это косяком)
По сути, гипотрохоида представляет из себя кривую (узор), который формируется при движении одной окружности по внутренней стороне другой окружности. К сожалению, всё, что связано с геометрией, не всегда просто объяснить словами, требуются графики, анимация и картинки, которыми я внесу ясности в эту статью. Но суть не в этом…
Создание узоров, формируемых различными гипотрохоидами, можно легко рассчитать с помощью формул:
- x = (R-r)*cos(t) + h*cos( ((R-r)/r)*t );
- y = (R-r)*sin(t) - h*sin( ((R-r)/r)*t );
В целом, у нас есть три переменные, которые можно менять:
- R – радиус большого круга (статичный)
- r – радиус маленького круга (движется по внутренней поверхности большой окружности)
- h – длина прямой, которая выходит из центра маленького круга.
Собственно, конец прямой (точка), и будет создавать различные узоры (гипотрохоиды). Переменная t задаёт угол поворота.
Если немного поиска в интернете, то можно ещё найти такие понятия, как трохоида, эпитрохоида или гипоциклоида. Имеется даже детская игрушка спирограф, которая позволяет создавать узоры.
Однако, столь нудное введение потребовалось лишь для внесения некоторой ясности, основная цель статьи будет ясна далее.
Гипотрохоида – создание узоров программным путём
Пример генерации различных узоров
Нет, я сейчас не буду затрагивать тему программирования в стиле учебника, а всего лишь покажу применение.
Многие аспекты геометрии и математики в целом, нашли полноценное применение только с появлением компьютеров и языков программирования. Вот и я однажды решил вспомнить свои навыки в JavaScript и применить их на практике. Однако, навык программирования лучше всего наращивать при создании полноценного приложения – только в этом случае проявляются все тонкости языка. Понятно, что язык языку рознь – одни позволяют создавать прикладные программы, другие – интерактивные интернет страницы и так далее.
JavaScript довольно прочно стоит на платформе популярности, и позволяет не только оживлять интернет страницы, но и создавать полноценные графические редакторы, которых теперь довольно много.
Я решил сделать что-то своё. Вначале я сделал небольшой редактор для создания узоров на основе приведенных выше формул. Благодаря возможности задавать случайный цвет, использовать циклы и условные операторы, я решил поэкспериментировать. Большинство гипотрохоид (создаваемых узоров), напоминали 3D шар, но при уменьшении оборотов внутреннего круга, получались фигуры на подобие цветков.
Хм…. А это идея. JavaScript тег canvas содержит обширный набор функций для заливки, отрисовки и поворота холста и заданных контуров. Немного поигравшись, я прописал нужные параметры для рисования различных цветов. Ещё немного времени, и я добавил некое подобие кистей, в итоге – онлайн редактор для создания узоров позволял рисовать сплошной или контурный цветок в заданной точке холста, или шлейф из нескольких цветков.
Левая панель позволяла регулировать размер, количество создаваемых узоров, задавать случайный цвет и ряд других параметров.
От создания узоров до создания цветочного фона
Когда в твоих руках умение владеть программным кодом, то можно не только применять его для создания цветочных узоров (гипотрохоид), но и генерировать различный фон. Тут пришлось немного посидеть, поскольку, чем больше программного кода становиться, тем больше приходится учитывать мелких деталей. Так, если размер создаваемого узора большой, но один, то несколько десятков циклов для создания цветных переходов не влияют на скорость рисования. Другое дело – если нужно нарисовать фон из 100-200 различных цветочков с цветными переходами. В этом случае, генерация фона порождает ощутимую задержку, и приходиться добавлять дополнительные условные операторы, для сокращения времени выполнения.
Поскольку мой графический редактор при создании узоров и фона генерирует аналог цветка, то я решил его назвать Flower - цветочный генератор фона. Да, я понимаю, что подобного добра полно, но буду рад, если данный комок программного кода найдёт свою аудиторию.
В статье затрагивается тема создания различных узоров (гипотрохоид), на основе которых можно сделать довольно полезный графический редактор или генератор фона.
Используя заданные параметры, можно создавать фиксированные рисунки и узоры, а в связке с языком программирования, получаются великолепные рисунки и фоны.
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: