4576

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

Курсовая

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

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

Русский

2012-11-22

437 KB

65 чел.

Введение

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

}}}


 

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

35450. Высшая нервная деятельность детей на протяжении первых 3 лет жизни 13.23 KB
  Высшая нервная деятельность детей раннего возраста характеризуется неуравновешенностью двух основных нервных процессов: процессы возбуждения преобладают над процессами торможения. В поведении детей много широко разлитых иррадиированных реакций. Поэтому нельзя требовать от детей быстрого прекращения начатого ими действия или выполнения какоголибо движения и быстрого переключения с одного действия на другое.
35451. Условные и безусловные рефлексы 10.8 KB
  Безусловные рефлексы природный запас готовых стереотипных реакций организма. Безусловные рефлексы одинаковы у всех особей одного вида. Условные рефлексы Но поведение высших животных и человека характеризуется не только врожденными т.
35452. Мотивация и емоции 10.94 KB
  На основании мотиваций формируется поведения ведущее к удовлетворению исходной потребности. Под эмоциями следует понимать определенное состояние организма человека и высших животных которое формируется под влиянием внешней или внутренней потребности или мысленного представления и сопровождается комплексом соматических и вегетативных сдвигов имеющих адаптационное значение. Таким образом эмоции следует рассматривать в качестве своеобразной приспособительной реакции которая формируется в процессе эволюции.
35453. Рост и развитие косной ткани 13.28 KB
  Можно выделить две различающиеся по происхождению группы костей. Большая часть костей нашего тела развивается на месте хряща. После этого продольный рост костей возможен в ограниченных пределах за счет суставного хряща покрывающего эпифизы на поверхности обращенной в полость сустава.Рост костей в толщину происходит по их поверхности.
35454. Двигательный режим учащихся и вред гиподинамии 14.08 KB
  Суточная двигательная активность детей может быть выражена в объеме естественных локомоций. Например у мальчиков 1415 лет по сравнению со школьниками 89 лет суточная двигательная активность увеличивается более чем на 35 а объем выполненной при этом работы на 160. Естественная суточная активность девочек ниже чем мальчиков. Девочки в меньшей мере проявляют двигательную активность самостоятельно и нуждаются в большей доле организованных форм физического воспитания.
35455. Художественное объединение «Мир искусства» 3.55 MB
  Бенуа и театральный деятель С. Бенуа объединение Мир искусства редактировал одноимённый журнал с 1898 по 1904 и сам писал искусствоведческие статьи. Историкохудожественную выставку русских портретов в Петербурге 1905; Выставку русского искусства в Осеннем салоне в Париже с участием произведений Бенуа Грабаря Кузнецова Малявина Репина Серова Явленского 1906 и др. Бенуа Александр Николаевич 1870 1960 Алекса́ндр Никола́евич Бенуа́ 21 апреля 3 мая 1870 9 февраля 1960 русский художник историк искусства художественный...
35456. Архитектура ЭВМ и систем 2.16 MB
  Выполнение типичной команды можно разделить на 5 ступеней: 1 выборка команды IF; 2 декодирование команды и чтение операндов РОН ID; 3 выполнение команды EX; 4 обращение к памяти MEM; 5 запоминание результата WB. Другая проблема: обращение к одному ресурсу памяти чтобы выбрать две команды. Для наращивания системы есть слоты расширения на шине ISA; КШ контроллер шины системный контроллер; КВУ контроллер внешних устройств; КОЗУ контроллер ОЗУ регенерация динамической памяти; К контроллер на базе специализированных 8...
35457. Глобальные сети, Структура глобальной сети. Интернет. Услуги Интернет 788.5 KB
  Синтаксис HTML. Структура HTMLдокументов HTML это язык гипертекстовой разметки. HTML можно использовать для представления: гипертекстовых новостей почты и сопутствующей гиперсреды картинки музыка; меню с опциями; результатов запросов к БД; структурированных документов со встроенной графикой аудио и видео и т. Ссылки на символы в HTML могут принимать две формы: Числовые десятичные или шестнадцатеричные D и xH; Комбинации символов escпоследовательности.
35458. Информационная безопасность и защита информации 1.64 MB
  По режиму работы аналоговые скремблеры делятся на класса: Статические схема кодирования остается неизменной во время всего сеанса передачи данных; Динамические в них постоянно генерируются кодовые подстановки во время передачи. Аналоговое скремблирование используется в основном там где применение цифровых систем закрытия речи затруднено изза наличия возможных ошибок при передаче данных например наземные линии связи с плохими характеристиками отечественные к. Используются где достаточно широкая полоса передачи данных. Избыточность...