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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2009, 13:28   #1
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию Лаба с Графикикой

сказали: сделай прогу типа задвигаются шторы в театре, только чтоб они не раздвигались а по формуле вверх втягивались т.е. дана функция x=y*(дельта х) дельта х вычисляется в цикле начиная с минимального значения . т.к. шторы две то нужно чтобы они по центру вверху соеденялись. задача прилагается. не знаю как реализовать это при помощи Timage как мне так начертить график чтобы все что ниже графика было прозрачным а все что выше опр цвета
прозрачным потому что у меня там картинка на заднем фоне
Вложения
Тип файла: zip лаба4.zip (470.1 Кб, 10 просмотров)
бедный_студент вне форума Ответить с цитированием
Старый 02.05.2009, 14:08   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. Нажимаете первую кнопку - Image заливается черным (можете вместо этого загрузить туда картинку шторы). Потом нажимаете вторую кнопку - штора начинает раздвигаться.

ps Кстати, в вашем архиве отсутствует исходник (.pas-файл)
Вложения
Тип файла: rar Штора.rar (170.5 Кб, 14 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.05.2009, 14:17   #3
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

благодарю за пример
а как прозрачным сделать неиспользуемую область и что это значит:
Цитата:
y := dd;
x1 := W div 2;
x2 := W div 2;
while (y<=H) and (x1>=0) and (x2<=W) do //пока что ?
begin
Image1.Canvas.Pixels[x1,y] := clWhite; //непонятно
Image1.Canvas.Pixels[x2,y] := clWhite; // непонятно
inc(y);
dec(x1); //а зачем тут шестнадцатеричная система
inc(x2);
end;
я так понял тут только две линии скрещивающиеся и закраска площади. а как гиперболу сделать
вотон исходник, кстати он в архиве имеется
кстати интересный глюк если нажать на кнопку еще раз то штора поднимается
Цитата:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Image2: TImage;
Image3: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;



var

Form1: TForm1;
min,max:real ;
leftx,lefty:integer;
rightx,righty:integer;
changer:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

if changer=1 then begin
changer:=0 ;
label2.Caption:=IntToStr(changer);

end
else
if changer=0 then begin
changer:=1;
label2.Caption:=IntToStr(changer);

end;

end;


end.

Последний раз редактировалось бедный_студент; 02.05.2009 в 14:33.
бедный_студент вне форума Ответить с цитированием
Старый 02.05.2009, 14:43   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а как прозрачным сделать неиспользуемую область и что это значит:
То есть? Ту, что за шторой?
Так это же не слои. Здесь "за" шторой ничего нет. Есть только штора. Если вам нужно показывать какой-нибудь рисунок, то вместо присвоения пикселю белого цвета:
Код:
Image1.Canvas.Pixels[x1,y] := clWhite;
присваивайте ему значения соответствующего пикселя из нужной картинки (которую сначала нужно загрузить в TBitmap).

Цитата:
while (y<=H) and (x1>=0) and (x2<=W) do //пока что ?
Сложно объяснить эту конкретную строчку. Вам нужно посмотреть на программу в целом.
W = Image1.Width, H = Image1.Height.
Поднятие шторы осуществляется закрашиванием в цикле двух линий (образующих галку).
Вот это условие и говорит, что закрашивать нужно до тех пор, пока не вышли за границы Image.

Цитата:
Image1.Canvas.Pixels[x1,y] := clWhite; //непонятно
Image1.Canvas.Pixels[x2,y] := clWhite; // непонятно
Присваиваем отдельному пикселю белый цвет.
Цитата:
dec(x1); //а зачем тут шестнадцатеричная система
При чем тут это?
Вам знакома процедура inc (инкремент)? Так вот dec - обратная процедура (декремент).

----------------------
Цитата:
вотон исходник
Ну, собственно, не вижу ничего полезного.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.05.2009, 14:53   #5
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

Вам знакома процедура inc (инкремент)? Так вот dec - обратная процедура (декремент).
неа понятию не имею о чем ты...
----------------------
Цитата:
вотон исходник
Ну, собственно, не вижу ничего полезного.
ну так надо запускать проект там два поля я думал можно как то именно графики построить этим компонентом чтоб гипербола полчучилать, а тут намного сложнее
бедный_студент вне форума Ответить с цитированием
Старый 02.05.2009, 15:23   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Вам знакома процедура inc (инкремент)? Так вот dec - обратная процедура (декремент).
неа понятию не имею о чем ты...
Вы не заметили, как у меня оформлены цитаты? Пользуйтесь тегом QUOTE.

Цитата:
неа понятию не имею о чем ты..
Тогда советую о ней почитать.

----------------------
Вот вам парабола.
Изменился только код обработчика TTimer
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var x1,x2: double;
y,x : integer;
i : integer;
begin

x1 := 0;
x2 := 0;
y := dd;
x := W div 2;
while (y<=H) and (x>=0) and (x<=W) do
 begin
 x := round(x1*W/50) + (W div 2);
 y := round(sqr(x1)*H/200) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x := round(x2*W/50) + (W div 2);
 y := round(sqr(x2)*H/200) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x1 := x1 + 000.1;
 x2 := x2 - 000.1;
 end;

dec(dd);
if dd<=0 then Timer1.Enabled := false;
end;
И сразу совет: сначала попробуйте разобраться самостоятельно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.05.2009, 15:35   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Если нужно, чтобы штора разъезжалась более "широко", то лучше такой код:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var x1,x2: double;
y,x : integer;
i : integer;
begin

x1 := -0.001;
x2 := 0.001;
y := dd;
x := W div 2;
while (y<=H) and (x>=0) and (x<=W) do
 begin
 x := round(x1*W/70) + (W div 2);
 y := round(exp(1.5*ln(abs(x1)))*H/200) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x := round(x2*W/70) + (W div 2);
 y := round(exp(1.5*ln(abs(x2)))*H/200) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x1 := x1 + 000.1;
 x2 := x2 - 000.1;
 end;

dec(dd);
if dd<=0 then Timer1.Enabled := false;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.05.2009, 15:48   #8
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

ух, блин...ладно и на этом спасибо

ПС вопросик, переменные значит в процедурах объявлять можно чтоб в заголовок не бегать постоянно ?(по больше информации)
бедный_студент вне форума Ответить с цитированием
Старый 02.05.2009, 15:57   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
переменные значит в процедурах объявлять можно чтоб в заголовок не бегать постоянно ?
Конечно можно.

Совет: вы бы сначала паскаль как следует изучили.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 22:34   #10
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var x1,x2: double;
y,x : integer;
i : integer;
begin

x1 := 0.001;
x2 := -0.001;
y := dd;
x := W div 2;
while (y<=H) and (x>=0) and (x<=W) do
 begin
 x := round(x1*W/70) + (W div 2);
 //y := round(exp(1.5*ln(abs(x1)))*H/200) + dd;
 y := -round(abs(2/x1)*H/50) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x := round(x2*W/70) + (W div 2);
 //y := round(exp(1.5*ln(abs(x2)))*H/200) + dd;
 y := -round(abs(2/x2)*H/50) + dd;
 Image1.Canvas.Pixels[x,y] := clWhite;

 x1 := x1 + 000.1;
 x2 := x2 - 000.1;
 end;

dec(dd);
if dd<=0 then Timer1.Enabled := false;
end;
а вот это обратная порабола
бедный_студент вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
лаба на паскале dvuser10 Помощь студентам 4 31.03.2009 14:11
Лаба в Delphi сер4ей Помощь студентам 3 08.03.2009 13:44
2-моя лаба на С++ densan Помощь студентам 3 16.02.2009 18:16