Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2010, 03:17   #1
Fantom_bog
Новичок
Джуниор
 
Регистрация: 22.05.2010
Сообщений: 1
Восклицание Маштабирование

надо чтобы результат всегда всезал в размеры формы, помогите пожалуйста!!!


Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math>
#include <stdlib.h>

#include <stdio.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------+------------------------------


float t1,f1,f0,u,fT,w,x1,u00,u11,tmax,xp,wx,v,y1,yp,wy,t2,x2,y2,t3,ft,x3,y3,x0,
      y0,fk,tp2,T,tp1,ff1,S,x1p,y1p,x3p,y3p,TT;
bool ff;
int x00=400,y00=400;
TColor coll;

void paint(int u0,int u1,TColor col, float tp1, float tp2, float T) {

Form1->Memo1->Lines->Add(FloatToStr(tp1+tp2+T));

        for (t1=0;t1<=tp1;t1+=0.5) {
                //Sleep(1);
                f1=f0+w*u0*t1;
                //if (u0!=0) {
                	x1=x0+wx*t1+(v*cos(f0)/(w*u0))-(v*cos(f1)/(w*u0));
                	y1=y0-wy*t1-(v*sin(f0)/(w*u0))+(v*sin(f1)/(w*u0));
                //} else {
                //	x1=x0+wx*t1;
                //	y1=y0+(v-wy)*t1;
                //}
                Form1->Canvas->Pixels[x1/100+x00][y1/100+y00]=col;

        }

        for (t2=0;t2<=tp2;t2+=0.5)   {
                //Sleep(1);
                x2=x1+(v*sin(f1)+wx)*t2;
                y2=y1+(v*cos(f1)-wy)*t2;
                Form1->Canvas->Pixels[x2/100+x00][y2/100+y00]=col;
        }
        for (t3=0;t3<=T;t3+=0.5)  {
                //Sleep(1);
                ft=fk-w*u1*t3;
                x3=0-wx*(t3)-(v*cos(fk))/(w*u1)+(v*cos(ft)/(w*u1));
                y3=0+wy*(t3)+(v*sin(fk))/(w*u1)-(v*sin(ft)/(w*u1));
                Form1->Canvas->Pixels[x3/100+x00][y3/100+y00]=col;
        }

}

void ddraw(int u0,int u1,TColor col) {
ff=0;
t1=0;

tmax=100000000;


while (ff==0) {
        t1+=0.5;
        f1=f0+w*u0*t1;
        x1p=x1; y1p=y1;

        x1=x0+wx*t1+(v*cos(f0)/(w*u0))-(v*cos(f1)/(w*u0));
        y1=y0-wy*t1-(v*sin(f0)/(w*u0))+(v*sin(f1)/(w*u0));
        if (abs(f1-f0)>=2*M_PI) {break;}

        //Form1->Canvas->Pixels[x1/100][y1/100]=col;

        t3=0;
        while (ff==0) {
             t3+=0.5;
             ft=fk-w*u1*t3;
             x3p=x3; y3p=y3;
             x3=0-wx*t3-(v*cos(fk))/(w*u1)+(v*cos(ft)/(w*u1));
             y3=0+wy*t3+(v*sin(fk))/(w*u1)-(v*sin(ft)/(w*u1));

             //Form1->Canvas->Pixels[x3/100][y3/100]=col;
             if (abs(ft-fk)>=2*M_PI) {break;}
             if ((cos(f1-ft)<=-0.98) &&
                (abs((x3-x1)/(v*sin(f1)+wx)-(y3-y1)/(v*cos(f1)-wy))<=0.5) &&
                ((pow(x1p-x3p,2)+pow(y1p-y3p,2))>(pow(x3-x1,2)+pow(y3-y1,2))) &&
                ((t1+(x3-x1)/(v*sin(f1)+wx)+t3)<TT)  ){
             //paint(u0,u1,col,t1,(x3-x1)/(v*sin(f1)+wx),t3);
             tp1=t1; tp2=(x3-x1)/(v*sin(f1)+wx); T=t3; u00=u0; u11=u1; coll=col;
             tmax=t1+tp2+t3;
             if (tmax<=TT) {TT=tmax;}
             }

        }
}



}


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


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Refresh();
Memo1->Clear();

TT=100000000;

v=StrToFloat(Edit3->Text);
wx=StrToFloat(Edit5->Text);
wy=StrToFloat(Edit6->Text);
w=StrToFloat(Edit4->Text);

x0=(StrToFloat(Edit7->Text)-x00)*100;
y0=(StrToFloat(Edit8->Text)-y00)*100;


Canvas->Pen->Color=clBlack;
Canvas->Pen->Width=1;

Form1->Canvas->MoveTo(x00,0);
Form1->Canvas->LineTo(x00,700);
Form1->Canvas->MoveTo(0,y00);
Form1->Canvas->LineTo(900,y00);

x1=0;
y1=0;

f0=StrToFloat(Edit1->Text);
fk=StrToFloat(Edit2->Text);


Canvas->Pen->Color=clBlack;
Canvas->Pen->Width=3;

S=sqrt(pow(xp,2)+pow(yp,2))+2*v/w;


Canvas->MoveTo(x00,y00);
Canvas->LineTo(x00-20*sin(fk),y00-20*cos(fk));
Canvas->MoveTo(x0/100+x00,y0/100+y00);
Canvas->LineTo(x0/100+x00-20*sin(f0),y0/100+y00-20*cos(f0));


ddraw(1,-1,clRed);
ddraw(1,1,clLime);
ddraw(-1,1,clBlue);
ddraw(-1,-1,clGreen);
paint(u00,u11,coll,tp1,tp2,T);


}
//---------------------------------------------------------------------------

Последний раз редактировалось MaTBeu; 22.05.2010 в 11:36.
Fantom_bog вне форума Ответить с цитированием
Старый 22.05.2010, 12:27   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код толком не смотрел, но у Canvas есть хорошая функция StretchDraw.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Маштабирование рисунка(увелечение) в C# Frenki Помощь студентам 5 15.03.2010 13:18
Ограничить маштабирование KoBRaAndrey Общие вопросы Delphi 4 08.01.2010 02:08
Маштабирование текста в Си Fataller Общие вопросы C/C++ 1 28.11.2009 20:22
Построение графика и маштабирование Nitrino Паскаль, Turbo Pascal, PascalABC.NET 0 12.05.2009 21:47