Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / C++ / Lab3C / ex2 / CLine

.cpp
Скачиваний:
65
Добавлен:
18.02.2017
Размер:
2.82 Кб
Скачать
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CLine.h"
#include <math.h>
#include "Lab3.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
//Конструктор
CLine::CLine(double x1, double y1, double x2, double y2) {
x=x1; y=y1; x0=x2; y0=y2; h=30; n=8; l0=60; v=0; a=0; k=0.2; m=2; l=15; };
void CLine::LineN(double &xn,double &yn) {
double e = sqrt((x0 - x) * (x0 - x) + (y0 - y) * (y0 - y));
if (e > 0) {
	xn = -(y0 - y) / e;
	yn = (x0 - x) / e; } };
//Рассчитываем угол
void CLine::SetAng(double u) {
Ang = u;
double e = sqrt((x - x0) * (x - x0) + (y - y0) * (y - y0));
x0 = x - cos(u * 3.1415926 / 180.0) * e;
y0 = y - sin(u * 3.1415926 / 180.0) * e; };
//Обработчик движения
void CLine::Move() {
a = ((l0 - l) * k) / m;
v = v + a;
l = l + v + a * 0.5; };
//Рисуем линию
void CLine::Draw() {
Form1->Image1->Canvas->Pen->Width = 2;
Form1->Image1->Canvas->Pen->Color = clRed;
Form1->Image1->Canvas->MoveTo(x0, y0);
Form1->Image1->Canvas->LineTo(x, y); };
//Рисуем подпружиненную биту
void CLine::DrawS() {
double xn, yn;
this->LineN(xn, yn);
double e = sqrt((x0 - x) * (x0 - x) + (y0 - y) * (y0 - y));
xn = xn * h;
yn = yn * h;
Form1->Image1->Canvas->Pen->Color = clBlue;
Form1->Image1->Canvas->Pen->Width = 1;
//Рисуем опору для подпружиненной биты
Form1->Image1->Canvas->MoveTo(x0, y0);
Form1->Image1->Canvas->LineTo(x0 + xn, y0 + yn);
//Рисуем крепление для подпружиненной биты
Form1->Image1->Canvas->MoveTo(x0 + xn * 0.5, y0 + yn * 0.5);
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l / (e * n), y0 + (y - y0) * l0 / (e * n));
//Рисуем пружину
for (double i = 1; i < n-2; i=i+2.0) {
Form1->Image1->Canvas->MoveTo(x0 + (x - x0) * l * i / (e * n), y0 + (y - y0) * l * i / (e * n));
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l * (i + 1) / (e * n) + xn, y0 + (y - y0) * l * (i + 1) / (e * n) + yn);
Form1->Image1->Canvas->MoveTo(x0 + (x - x0) * l * (i + 1) / (e * n) + xn, y0 + (y - y0) * l * (i + 1) / (e * n) + yn);
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l * (i + 2) / (e * n), y0 + (y - y0) * l * (i + 2) / (e * n)); }
//Рисуем биту
Form1->Image1->Canvas->MoveTo(x0 + (x - x0) * l / e, y0 + (y - y0) * l / e);
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l * (n - 3) / (e * n) + xn * 0.5, y0 + (y - y0) * l * (n - 3) / (e * n) + yn * 0.5);
Form1->Image1->Canvas->MoveTo(x0 + (x - x0) * l / e + xn, y0 + (y - y0) * l / e + yn);
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l * (n - 3) / (e * n) + xn * 0.5, y0 + (y - y0) * l * (n - 3) / (e * n) + yn * 0.5);
Form1->Image1->Canvas->MoveTo(x0 + (x - x0) * l / e, y0 + (y - y0) * l / e);
Form1->Image1->Canvas->LineTo(x0 + (x - x0) * l / e + xn, y0 + (y - y0) * l / e + yn); };
Соседние файлы в папке ex2