4576

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

Курсовая

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

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

Русский

2012-11-22

437 KB

60 чел.

Введение

В рамках данного курсового проекта требуется написать программу, рисующую кривые второго порядка. Для разработки была использована среда разработки 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);  }

}}}


 

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

80580. Формирование эффективного организационно-экономического механизма в РУП «Издательство «Белорусский Дом печати» 938.63 KB
  В настоящем дипломном проекте произведен анализ состояния предприятия, выявлены факторы, оказывающие влияние на себестоимость и эффективность функционирования предприятия, а также основные проблемы в развитии предприятия.
80581. Психолого-педагогическое сопровождение подростков «группы риска» в специальных (коррекционных) образовательных учреждениях 313 KB
  Объектом исследования выпускной квалификационной работы являются подростки «группы риска» в специальном (коррекционном) образовательном учреждении. Предмет исследования – процесс психолого-педагогического сопровождения подростков «группы риска» в специальном (коррекционном) образовательном учреждении.
80582. Контроль расчетов и отражение дебиторской и кредиторской задолженности в бухгалтерской финансовой отчетности ГКУ «ИС района Хамовники» 113.14 KB
  Востребованность результатов исследований в области внутрихозяйственного контроля дебиторской и кредиторской задолженности определяется недостаточной степенью раскрытия ряда существенных теоретических и прикладных положений.
80583. Разработка стратегии продвижения бренда обучающего центра сферы услуг на российский рынок (на примере бренда «Академия Колористики и Геометрии Натальи Туниковской») 1.42 MB
  Объектом работы является бренд «Академия Колористики и Геометрии Натальи Туниковской». Предметом исследования является разработка стратегии продвижения бренда на российский рынок. В первой главе на теоретико-методологической основе рассмотрены базовые понятия бренда и его основных элементов...
80584. Проект реконструкции ОРУ-110 кВ на подстанции «Ингалинская» 304.05 KB
  Оборудование РУ по своим паспортным данным должно удовлетворять условиям работы как при номинальном режиме так и при КЗ. Аппараты и шины должны обладать необходимой термической и динамической стойкостью; изоляция оборудования должна выдерживать возможные повышения...
80585. Разработка мероприятия по наладке и эксплуатации вычислительного модуля (ВЧС) в составе устройства числового программного управления (УЧПУ) «Электроника МС2101» с выполнением реальной части 370.73 KB
  Целями дипломного проектирования являются: разработка мероприятий по наладке и эксплуатации вычислительного модуля (ВЧС) в составе УЧПУ «Электроника МС2101»; выполнение реальной части дипломного проекта, изготовление универсального прибора диагностирования (осциллографа) и программного обеспечения к нему.
80586. Особенности переводческих трансформаций в рассказах Э.По 384 KB
  В процессе перевода часто оказывается невозможным использовать соответствие слов и выражений, которые нам дает словарь. В подобных случаях мы прибегаем к трансформационному переводу, который заключается в преобразовании внутренней формы слова или словосочетания или же ее полной замене для адекватной передачи содержания высказывания.
80587. Рекреационные ресурсы и курортология 2.05 MB
  Структура рекреационного потенциала территории представляет собой систему, состоящую из двух ведущих блоков: ресурсной составляющей, представленной рекреационными ресурсами и социально-экономической составляющей, представленной материально-технической базой.
80588. Течения в Мировом океане 667 KB
  Учебное пособие посвящено одной из наиболее интересных проблем современной океанологии - теоретическому изучению течений в Мировом океане. Показаны основные силы, вызывающие движение в океане. Представлены сведения о математическом решении направления и скорости плотностных и дрейфовых течений.