С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Регина
1 / 1 / 0
Регистрация: 07.04.2008
Сообщений: 44

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

03.05.2008, 19:25. Показов 1911. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сижу над курсовиком, думаю что-то я неправильно начала прогу вроде ((( Суть зачачи в том, нужно чтобы получилось движение закрашенного прямоугольника по синусоиде в середине экрана. Скажу честно по графике я даже не чайник. Синусоиду построила а дальше никак
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
implementation
{$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.
кто-чем может,помогите плиииз!!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2008, 19:25
Ответы с готовыми решениями:

Нужно срочно испраить ошибки в проге.. запуталась. Вычеркнуть строку и столбец на пересечении которого находится максимальный элемент
unit Unit1333; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Запуталась в коде, помогите!
Нужно было написать программу, которая находит определитель и обратную матрицу, и вместе с тем...

Работа с 2D графикой и анимация
Здравствуйте Решил написать простейшую анимацую с упралением. Вобщем прога такая движущийся...

5
 Аватар для Dr.Acula
212 / 10 / 4
Регистрация: 25.04.2007
Сообщений: 67
04.05.2008, 09:34
Ну, например...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    f_tick: integer;
    f_sinusPeriods: double;
    f_sinusAmpInPercents: double;
    f_rectWidth: integer;
    f_rectHeight: Integer;
    f_rectColor: TColor;
    f_rectX: integer;
    f_rectY: integer;
    procedure PaintRect();
    ....
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  f_tick := f_tick + 1;
  if f_tick > ClientWidth then f_tick := 1;
  PaintRect;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := true;
  Timer1.Interval := 10;
 
  f_tick := 1;
  f_sinusPeriods := 5;
  f_sinusAmpInPercents := 50;
  f_rectWidth := 5;
  f_rectHeight := 5;
  f_rectColor := clRed;
  f_rectX := 0;
  f_rectY := round(ClientWidth / 2);
end;
procedure TForm1.PaintRect;
var
  sinusArg : double;
begin
  Canvas.Pen.Color := clBtnFace;
  Canvas.Brush.Color := clBtnFace;
  Canvas.Rectangle(f_rectX, f_rectY, f_rectX + f_rectWidth, f_rectY + f_rectHeight);
  sinusArg := ( ( ( f_tick / ClientWidth ) * 2 * Pi ) * f_sinusPeriods );
  f_rectX := f_tick;
  f_rectY := round(
    ( ClientHeight / 2 ) *
    ( 1 - ( f_sinusAmpInPercents / 100 ) * Sin( sinusArg ) ) );
  Canvas.Pen.Color := f_rectColor;
  Canvas.Brush.Color := f_rectColor;
  Canvas.Rectangle(f_rectX, f_rectY, f_rectX + f_rectWidth, f_rectY + f_rectHeight);
end;
0
 Аватар для Регина
1 / 1 / 0
Регистрация: 07.04.2008
Сообщений: 44
04.05.2008, 20:14  [ТС]
Спасибки, попробую разобраться

Добавлено через 43 минуты
Одного не пойму зачем
procedure PaintRect();?
и почему после нее многотичие стоит. Такого значка на панели инструментов не нашла, есть только PaintBox1. Но это видимо не подходит, прога ошибку выводит. :huh:
0
 Аватар для Delphiist
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
04.05.2008, 20:42
procedure PaintRect(); - Это отдельная процедура рисующая закрашенный прямоугольник в точке с координатами f_rectX, f_rectY, которая в любой момент времени принадлежит синусоиде.

На многоточие можно не обращать внимание.

А какую конкретно ошибку выдает программа.
0
 Аватар для Регина
1 / 1 / 0
Регистрация: 07.04.2008
Сообщений: 44
15.05.2008, 18:36  [ТС]
У меня немного другой метод проги, только я незнаю как этот прямоугольник закрасить? если знаешь, подскажи пожалуйста!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TTMainform = 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
  TMainform: TTMainform;
  CX,CY:Real;
  X0,Y0:integer;
  CN:TCanvas;
  OX:integer;
  Drawing:boolean;
implementation
{$R *.dfm}
procedure TTMainform.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 TTMainform.FormCreate(Sender: TObject);
 begin
 X0:=TMainform.ClientWidth div 2;
 Y0:=TMainform.ClientHeight div 2;
 end;
    end.
0
 Аватар для Delphiist
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
19.05.2008, 00:15
Dr.Acula уже говорил как закрасить прямоугольник

Code
1
2
3
4
5
6
7
8
9
10
11
...[COLOR="Blue"]
 Canvas.Brush.Style := bsSolid; // полная закраска
 Canvas.Pen.Color := clRed; // красим края красным цветом
 Canvas.Brush.Color := clRed; // заливка красным цветом[/COLOR]
 Canvas.Rectangle(Round(CX*SX-10+X0),
 Round(CY*SY-10+Y0),
 Round(CX*SX+10+X0),
 Round(CY*SY+10+Y0));[COLOR="Blue"]
 Canvas.Brush.Color := clBtnFace; // восстанавливаем цвет для фона
 Canvas.Pen.Color := clBtnFace;[/COLOR]
...
Синим цветом выделены строки, которые были добавлены в код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2008, 00:15
Помогаю со студенческими работами здесь

Помогите с графикой
Привет друзья надо прога в делфи которая рисует правильный 4угольник 5угольник и 12угольник в...

Работа с графикой
Подскажите пожалуйста! Можно ли к функции ellipse(x1,y1,x2,y2) применить прозрачный Brush!! То есть...

Работа с графикой и ошибка "Class Timage not Found"
Попогите определить ссобщение ошибки , Project Project1.exe raised exeption class EClassNotFound...

Вращающийся отрезок - работа с графикой
Здравствуйте, помогите с заданием, никогда не работал с графикой и свойствами подобных объектов......

Подскажите, что нужно для создания игры с 2D графикой?
Добрый день товарищи программисты!!! На следующем курсе у меня курсовая работа, нужно сделать игру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru