Запуталась с графикоЙ!!!!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

Сижу над курсовиком, думаю что-то я неправильно начала прогу вроде ((( Суть зачачи в том, нужно чтобы получилось движение закрашенного прямоугольника по синусоиде в середине экрана. Скажу честно по графике я даже не чайник. Синусоиду построила а дальше никак
mplementation
{$R *.dfm}
function F(x:real): real;
begin
F:=2*sin(x)-5;
end;
procedure TForm1.Button1Click(Sender: TObject);
var a,a1,b,dx,m,my,mx,min,max,x,y:real;
W,H,y00,x00,xp,yp,i,k,l,d:integer;
begin
a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text);
dx:=0.1;
d:=5;
W:=Form1.Width-2*d;
H:=Form1.Height-2*d;
min:=f(a);
max:=min;
x:=a+dx;
repeat
y:=f(x);
if y<min then min:=y;
if y>max then max:=y;
x:=x+dx;
until (x>b);
if min>0 then min:=0;
if max<0 then max:=0;
my:=H/(abs(max-min));
mx:=W/(abs(b-a));
if my<=mx then m:=my else m:=mx;
if a<0 then a1:=a else a1:=0;
y00:=Round(m*max)+d;
x00:=Round(abs(a1)*m)+d;
with Form1.Canvas do
begin
pen.color:=clBlack;
MoveTo(0, y00); LineTo(W, y00);
MoveTo(x00, 0); LineTo(x00, H);
x:=a;
y:=f(a);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
MoveTo(xp,yp);
pen.color:=clGreen;
repeat
x:=x+dx;
y:=f(x);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
LineTo(xp,yp);
until (x>=b);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=clBtnFace;
Form1.Canvas.Pen.Color:=clBtnFace;
Form1.Canvas.Rectangle(0,0,Form1.Width, Form1.Height);
Form1.Canvas.Pen.Color:=clBlack;
end;
end.
кто-чем может,помогите плиииз!!!!
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Во-перывх, вопрос - что вводится в Edit1 и Edit2?

Во-вторых - используйте теги
[noparse] или

[syntax='Delphi']

[/syntax]
[/noparse]

кргда вставляете код.
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

туда вводятся координаты графика. насчет тэгов, в следующий раз буду иметь ввиду )))
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

туда вводятся координаты графика. насчет тэгов, в следующий раз буду иметь ввиду )))
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Как-то у вас все запутано, я бы сделал проще:

[syntax='Delphi']
unit Mainunit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;

var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;

implementation

{$R *.dfm}

procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;

procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;


end.
[/syntax]

Форма должна быть сразу(в процессе разработки) развернута на весь экран.

P.S. Зачем было создавать второе сообщение?
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

MOTOCoder писал(а):Как-то у вас все запутано, я бы сделал проще:

[syntax='Delphi']
unit Mainunit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;

var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;

implementation

{$R *.dfm}

procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;

procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;


end.
[/syntax]

Форма должна быть сразу(в процессе разработки) развернута на весь экран.

P.S. Зачем было создавать второе сообщение?




Спасибо большое!!!! ты очень помог мне! :) :) :) а ты не знаешь как этот прямоугольник закрасить можно?
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Можно так:
[syntax='Delphi']
unit Mainunit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;

var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;

implementation

{$R *.dfm}

procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
canvas.Brush.Color:=clbtnface;{устанавливаем цвет фона}
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Brush.Color:=clblack;{устанавливаем цвет прямоугольника}
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;

procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]

То, что нужно добавить, отмечено комментариями.
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

Большое прибольшое спасибо!!!!!!!!!!!!!! Очень блогодарна за твою помощь!!!! чмок в обе щечки!!! ;) )
sasha3050
Сообщения: 26
Зарегистрирован: 04 окт 2008, 23:13

Пожалуйста помогите очень нужно!!!!!!!!!Написать программу на Paskal, которая вычисляет среднюю длину слов в файле, который содержит текст.В данном случае будет считатьтся любая строка символов, которая начинается и заканчивается одним с следующих елеметов: пробел, запятая, точка, начало строки и конец строки.В программе должна быть обозначена функция, которая получает в качестве аргумента поток ввода с файла.
Ответить