Интерполяция в программе C++ Builder 6.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Death_angel
Сообщения: 1
Зарегистрирован: 06 ноя 2016, 23:00

06 ноя 2016, 23:06

Помогите, пожалуйста. Есть программа для вывода интерполяции на график в программеC++ Builder 6, как правильно создавать и вводить код в этой программе? раньше только с командной строчкой была работа, а вот графики еще не знаю как выводить:

Код: Выделить всё

#include <vcl.h>
#include <iostream>
#include <stdio.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
void DrawBezier(TImage *Image,int x0,int y0,int x,int y,int x1,int y1,int Count)
{
TPoint points[900];  //ГЊГ*Г±Г±ГЁГў òî÷åê äëÿ ïîëèãîГ*Г*
//Extended - long double
Extended Step = 1.0/Extended(x1-x0);  //ØГ*ГЈ èçìåГ*ГҐГ*ГЁГї ГЇГ*Г°Г*ìåòðГ* t
Count = 0;
 
for(int i = x0; i < x1 && i-x0 < 900; i++)
{
Extended t = Extended(i-x0)*Step; //Î÷åðåäГ*îå Г§Г*Г*Г·ГҐГ*ГЁГҐ ГЇГ*Г°Г*ìåòðГ* t
//ÑîáñòâåГ*Г*Г® Г°Г*Г±Г·ГҐГІ êîîðäèГ*Г*ГІ î÷åðåäГ*îé òî÷êè äëÿ 2D
//ГќГІГ® Г±Г·ГЁГІГ*ГѕГІГ±Гї êîýôôèöèåГ*ГІГ» q1,q2,q3,q4
Extended q1 = t*t*t*-1 + t*t*3 + t*(-3) + 1;
Extended q2 = t*t*t*3 + t*t*(-6) + t*3;
Extended q3 = t*t*t*(-3) + t*t*3;
Extended q4 = t*t*t;
//Çäåñü ïîäñòГ*âëÿþòñÿ êîîðäèГ*Г*ГІГ» îïîðГ*ûõ òî÷åê
Extended qx = q1*x0 + q2*x + q3*x + q4*x1;
 
//äëÿ q2 ГЁ q3 îäèГ*Г*êîâûå x,y, ГЅГІГ® äëÿ ñîâìåùåГ*ГЁГї äâóõ ñðåäГ*ГЁГµ òî÷åê
Extended qy = q1*y0 + q2*y + q3*y + q4*y1;
points[i-x0].x = qx ;
points[i-x0].y = qy ;
//Æèâîé ïîäñò÷åò êîëè÷åñòâГ* òî÷åê Гў ïîëèãîГ*ГҐ
//(Г*åêîòîðûå ìîãóò âû÷èñëèòü ГҐГЈГ® äî öèêëГ*)
Count++;
}
 
//ГЋГ·ГЁГ±ГІГЄГ* ïëîùГ*äè äëÿ ðèñîâГ*Г*ГЁГї
Image->Canvas->Brush->Color= clWhite ;
Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height));
Image->Canvas->Brush->Color= clRed ;
Image->Canvas->Pen->Color= clBlack ;
//Г‡Г*ìûêГ*ГҐГ¬ ïîëèãîГ*
points[Count].x = points[0].x ;
points[Count].y = points[0].y ;
Polyline(Image->Canvas->Handle,points,Count+1);
//È ÂÎÒ ÎÍÀ ÊÐÈÂÀß ÁÅÇÜÅ, ÊÐÀÑÍÀß ÒÀÊÀß
//Г* Г§Г*îäГ*Г® ГЁ ïðîâåðêГ* ïîïГ*Г¤Г*Г*ГЁГї x, y Гў ГҐГҐ òåëî
 
HRGN Rgn;
//ÑîçäГ*ГІГј ðåãèîГ* ГЁГ§ òî÷åê
if((Rgn = CreatePolygonRgn(points, Count, WINDING))!=NULL)
{
//Ïðîâåðèòü ïîïГ*äèГ*ГЁГҐ òî÷êè Гў ðåãèîГ*
if(PtInRegion(Rgn,x,y))
  Form1->Label1->Caption= "ÌûøêГ* Гў Г*îðêå.";
 
else
  Form1->Label1->Caption= "";
PaintRgn(Image->Canvas->Handle,Rgn);   //ÎòîáðГ*çèòü ðåãèîГ*
DeleteObject(Rgn);  //ÓäГ*ëèòü ðåãèîГ*
}
//ГЌГ*ðèñîâГ*ГІГј 2 ïðÿìûå ГЁГ§ ГЄГ°Г*Г©Г*ГЁГµ òî÷åê Гў òî÷êó x,y äëÿ ГЅГґГґГҐГЄГІГ*
Image->Canvas->Pen->Color = clRed;
Image->Canvas->MoveTo(x0,y0);
Image->Canvas->LineTo(x,y);
Image->Canvas->Pen->Color = clBlue;
Image->Canvas->MoveTo(x1,y1);
Image->Canvas->LineTo(x,y);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//void DrawBezier(TImage *Image,int x0,int y0,int x,int y,int x1,int y1,int Count)
DrawBezier(Image1, 100, 200, 200, 100, 300, 200, 4);
Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
Подскажите что мне исправить или добавить в коде.
Выдает ошибки:
[C++ Error] Unit1.cpp(57): E2316 'Label1' is not a member of 'TForm1'
[C++ Error] Unit1.cpp(60): E2316 'Label1' is not a member of 'TForm1'
[C++ Error] Unit1.cpp(78): E2316 '_fastcall TForm1::Timer1Timer(TObject *)' is not a member of 'TForm1'
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

07 ноя 2016, 00:01

Видимо, ты откуда-то содрал код, а форму при не взял оттуда.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить