4576

Создание программы для рисования кривых второго порядка в среде Borland C++ Builder 6

Курсовая

Информатика, кибернетика и программирование

Введение В рамках данного курсового проекта требуется написать программу, рисующую кривые второго порядка. Для разработки была использована среда разработки BorlandC++ Builder 6. Формулировка поставленной задачи Написать программу, рисующую кр...

Русский

2012-11-22

437 KB

62 чел.

Введение

В рамках данного курсового проекта требуется написать программу, рисующую кривые второго порядка. Для разработки была использована среда разработки Borland C++ Builder 6.

Формулировка поставленной задачи

Написать программу, рисующую кривые второго порядка.

Описание предметной области

Все кривые второго порядка можно описать формулой:

a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0. Вид кривой будет зависеть только от коэффициентов.

Инварианты

Вид кривой зависит от 4 инвариантов:

  •  инварианты относительно поворота и сдвига системы координат
    •  
    •  
    •  
  •  инвариант относительно поворота системы координат (полуинвариант)
    •  

Классификация кривых второго порядка

Невырожденные кривые

Кривая второго порядка называется «невырожденной», если . Могут возникать следующие варианты:

  •  Эллипс — при условии D > 0 и IΔ < 0.
  •  Окружность (частный случай эллипса) — при условии a11 = a22, a12 = 0.
  •  Мнимый Эллипс (пустое множество) — при условии D = 0 и IΔ > 0.
  •  Гипербола — при условии D < 0.
  •  Парабола — при условии D = 0.

Вырожденные кривые

Кривая второго порядка называется «вырожденной», если Δ = 0. Могут возникать следующие варианты:

  •  Точка — при условии D > 0 (вырожденный эллипс)
  •  Пара пересекающихся прямых — при условии D < 0 (вырожденная гипербола).
  •  Пара параллельных прямых — при условии D = 0 и B < 0.
  •  Прямая (две слившихся параллельных прямых) — при условии D = 0 и B = 0.
  •  Пара мнимых параллельных прямых — при условии D = 0 и B > 0.

Уравнения

Канонический вид

Вводом новой системы координат можно привести уравнения кривых второго порядка к каноническому виду:

  •  Невырожденные кривые
    •  (эллипс)
    •  (гипербола)
    •  y2 = 2px (парабола)
  •  Вырожденные кривые
    •  (точка)
    •  (пересекающиеся прямые)
    •  (параллельные прямые)
    •  x2 = 0 (одна прямая)

Описание вариантов использования

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

Рис 1. Окно программы.

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

Описание структуры программы

Для построения кривой перебираем X , а следовательно на каждом шаге он нам известен и является константой. Уравнение

 a 11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0

 преобразуетсяя в

 by2+2(cx+e)y+ax2+2dx+f=0.

 Эта общая формула квадратного уравнения ay2+by+c’=0, где  

     a’=b, b’=2(cx+e), c’= ax2+2dx+f.

 

А для функции ay2+by+c’=0  можно вычислить дискриминант и посчитать корни. Таким образом, для каждого X находится одно или два значения Y, если они имеются, и выводятся на экран.

 

Рассмотрим подробнее принцип работы программы.

При нажатии на кнопку «Строить», выполняется следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float y,D,x1,x2,a,b,c,d,e,f;   //объявляем вещественные переменные

//присваиваем значения коэффициентов

a=StrToFloat(Edit1->Text);   // a11

b=StrToFloat(Edit2->Text); // a22

c=StrToFloat(Edit3->Text); // a12

d=StrToFloat(Edit4->Text); // a13

e=StrToFloat(Edit5->Text); // a23

f=StrToFloat(Edit6->Text); // a33

Series1->Clear();   //очищаем поле для графика

Chart1->BottomAxis->Minimum=StrToFloat(Edit7->Text);  

//вводим минимум оси X из формы

Chart1->BottomAxis->Maximum=StrToFloat(Edit8->Text);  

// вводим максимум оси X из формы

for(float x=StrToFloat(Edit7->Text);x<=StrToFloat(Edit8->Text);x=x+0.005)

//объявляем вещественную переменную и перебираем точки из заданного интервала с шагом 0.005

{

       if (b==0){ Series1->AddXY(x, -(a*x*x+2*d*x+f) / 2*(c*x+e)) ; }

//частный случай (при b==0), при котором уравнение превращается в линейное

       else

       {

       D=(c*x+e)*(c*x+e)-b*(a*x*x+2*d*x+f);

//считаем дискриминант, и смотрим количество корней

       if (D==0){Series1->AddXY(x,-(c*x+e)/b);} // 1 корень

else

       if (D>0)      // 2 корня

     

      {Series1->AddXY(x,(-(c*x+e)+sqrt(D))/b);      

        Series1->AddXY(x,(-(c*x+e)-sqrt(D))/b);  }

        }

}

}

Series1->AddXY(x,y) – рисует точку с соответствующими координатами.

Контрольный пример

Приведем пример некоторой, произвольно набранной, функции (Рис 2).

Рис 2. Пример некоторой функции.

Вывод

В ходе работы была написана программа в среде Borland C++ Builder 6 и проверена её работоспособность.  Программа графически изображает кривые второго порядка. Она строит кривую на заданном пользователем  интервале на оси абсцисс.

Список литературы

  1.  Культин Н.Б. «C++ Builder в задачах и примерах» - СПб: «БХВ-Петербург», 2005;

Приложение

Код программы

//---------------------------------------------------------------------------

#include <vcl.h>

#include <math.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float y,D,x1,x2,a,b,c,d,e,f;

a=StrToFloat(Edit1->Text);

b=StrToFloat(Edit2->Text);

c=StrToFloat(Edit3->Text);

d=StrToFloat(Edit4->Text);

e=StrToFloat(Edit5->Text);

f=StrToFloat(Edit6->Text);

Series1->Clear();

Chart1->BottomAxis->Minimum=StrToFloat(Edit7->Text);

Chart1->BottomAxis->Maximum=StrToFloat(Edit8->Text);

for(float x=StrToFloat(Edit7->Text);x<=StrToFloat(Edit8->Text);x=x+0.005)

{

       if (b==0){ Series1->AddXY(x, -(a*x*x+2*d*x+f) / 2*(c*x+e)) ; }

       else

       {

     //  a*x*x+b*y*y+2*c*x*y+2*d*x+2*e*y+f=0;

       D=(c*x+e)*(c*x+e)-b*(a*x*x+2*d*x+f);

       if (D==0){Series1->AddXY(x,-(c*x+e)/b);}else

       if (D>0){Series1->AddXY(x,(-(c*x+e)+sqrt(D))/b);

        Series1->AddXY(x,(-(c*x+e)-sqrt(D))/b);  }

}}}


 

А также другие работы, которые могут Вас заинтересовать

50276. ОБЩАЯ ФИЗИОЛОГИЯ СЕНСОРНЫХ СИСТЕМ. ФИЗИОЛОГИЯ АНАЛИЗАТОРОВ 182.5 KB
  ЦНС получает информацию о внешнем мире и внутреннем состоянии организма от специализированных к восприятию раздражений органов рецепции. Многие органы рецепции называют органами чувств потому, что в результате их раздражения и поступления от них импульсов в кору больших полушарий головного мозга
50277. ФИЗИОЛОГИЯ БОЛИ 161.5 KB
  Соматическая: поверхностная (кожа) и глубокая (мышцы, суставы, связки, кости). Висцеральная – во внутренних органах (воспаление, деструкция, дискинезия, нарушение кровоснабжения); Проекционная (фантомная). Отраженная (зоны Захарьина-Геда)
50278. Промежуточный мозг 64.5 KB
  Анатомически промежуточный мозг (diencephalon) является отделом мозгового ствола. Однако, в отличие от среднего и продолговатого мозга, промежуточный мозг в эмбриогенезе формируется вместе с большими полушариями из переднего мозгового пузыря.
50279. ФИЗИОЛОГИЯ ЗРИТЕЛЬНОГО АНАЛИЗАТОРА 6.53 MB
  Определение ЗА: это сенсорная система, воспринимающая электромагнитные излучения с длинами волн видимого диапазона (400 – 760 нм) и формирующая световые ощущения.
50280. ОПЕРЕДЕЛЕНИЕ ГОРИЗОНТАЛЬНОЙ СОСТАВЛЯЮЩЕЙ НАПРЯЖЕННОСТИ МАГНИТНОГО ПОЛЯ ЗЕМЛИ МЕТОДОМ ТАНГЕНС-ГАЛЬВАНОМЕТРА 130.5 KB
  Тангенс-гальванометр –- это прибор состоящий из короткой по длине катушки индуктивности радиуса R и подвижной магнитной стрелки вертикальная ось которой закреплена в геометрическом центре катушки рис. 4 Магнитное поле созданное током протекающим по виткам катушки тангенс-гальванометра направлено вдоль оси катушки и перпендикулярно плоскостям витков с током. 2 Величина напряженности магнитного поля в центре N круговых токов короткой катушки индуктивности может быть найдена по закону Био-Савара-Лапласа 3 где I –...
50281. ОПРЕДЕЛЕНИЕ УДЕЛЬНОГО ЗАРЯДА ЭЛЕКТРОНА 160 KB
  Величина удельного заряда может быть измерена различными методами. В данной работе используется «метод магнетрона», в котором используется отклонение магнитным полем электрона, движущегося ускоренно под действием электрического поля, перпендикулярного магнитному. На заряженную частицу, движущуюся со скоростью v в однородном (одинаковом во всех точках пространства) магнитном поле с индукцией В, действует сила Лоренца...
50282. Интерфейс программного комплекса Electronics Workbench 2.28 MB
  Интерфейс пользователя состоит из полоски выпадающего меню панели инструментов и рабочей области. Полоса выпадающего меню состоит из следующих компонент: 1. File меню работы с файлами 2. Edit меню редактирования 3.
50284. Создание и обработка баз данных о занятиях и преподавателях 553.5 KB
  Анализ задания на разработку базы данных. Формы для редактирования табличных данных. Microsoft ccess – это система управления базами данных СУБД.