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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2007, 18:24   #1
Jose
 
Регистрация: 30.01.2007
Сообщений: 5
По умолчанию Помогите с рисованием на Delphi, компонент paintbox

Помогите пожалуйста надо решить 2 задачи на Делфи (рисование на paitpox):
I) Звёзды, Компоненты: button1, paintbox1, edit1, edit2: 1) edit1 - k - количество звёзд, 2) edit2 - m - максимальный размер.
II) Перекатывание квадрата, Компоненты button2, paintbox2, edit3 - a - сторона квадрата. (квадрат должен перевернутся 2, раза на одну сторону потом на следуюшую)
(в поля edit пользователь водит значения)
P.S Взоранее примного благодарен
Jose вне форума Ответить с цитированием
Старый 30.01.2007, 18:31   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

так тут проблемы не с Paintbox,
алгоритм(ы) у тебя есть ?
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 30.01.2007, 20:14   #3
Jose
 
Регистрация: 30.01.2007
Сообщений: 5
По умолчанию

У мя есть координаты звезды и квадрата
//звезда
paintbox1.Canvas.MoveTo(100,50);
paintbox1.Canvas.LineTo(70,150);
paintbox1.Canvas.LineTo(150,90);
paintbox1.Canvas.LineTo(50,90);
paintbox1.Canvas.LineTo(130,150);
paintbox1.Canvas.LineTo(100,50);
//квадрат
Paintbox2.Canvas.MoveTo(100,100);
Paintbox2.Canvas.LineTo(100,200);
Paintbox2.Canvas.LineTo(200,200);
Paintbox2.Canvas.LineTo(200,100);
Paintbox2.Canvas.LineTo(100,100);

их бы по циклам раскидать и в место точных значений x, y ставить что нить такое чтоб звезда изменяла размер а квадрат перекатывлся, читывая значения в полях edit
Jose вне форума Ответить с цитированием
Старый 30.01.2007, 22:31   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Задача №1:

Код:
Procedure PaintZvezd(X,Y,Size:Integer);
Begin
Form1.PaintBox1.Canvas.MoveTo(X,Y);
Form1.PaintBox1.Canvas.LineTo(X-(Size-Size div 100*70),Y+Size);
Form1.PaintBox1.Canvas.LineTo(X+Size-Size div 100*50,Y+Size-Size div 100*60);
Form1.PaintBox1.Canvas.LineTo(X-(Size-Size div 100*50),Y+Size-Size div 100*60);
Form1.PaintBox1.Canvas.LineTo(X+Size-Size div 100*70,Y+Size);
Form1.PaintBox1.Canvas.LineTo(X,Y);
End;

procedure TForm1.Button1Click(Sender: TObject);
var i,Size:Integer;
begin
For I:=1 to StrToInt(Edit1.Text) do
Begin
Size:=Random(StrToInt(Edit2.Text)-100)+100;
PaintZvezd(Random(PaintBox1.Width),Random(PaintBox1.Height),Size);
End;
end;
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 31.01.2007, 00:48   #5
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию

не было время что либо больше крапать - держи что есть...
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    PaintBox2: TPaintBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
  var
  x,y,c,i,max,k:integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
{x:=x+1;
y:=y+1;}
k:=strtoint(edit1.Text);
max:=strtoint(edit2.Text);
Randomize;
for i:=1 to k do
begin
   x:=trunc(random(paintbox1.Width));
   y:=trunc(random(paintbox1.Height));
   c:=trunc(random(max));
 paintbox1.Canvas.MoveTo(x,y-c);
paintbox1.Canvas.LineTo(x-30-c,y+100+2*c);
paintbox1.Canvas.LineTo(x+50+2*c,y+40-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x-50-2*c,y+40-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x+30+c,y+100+2*c);
paintbox1.Canvas.LineTo(x,y-c);
end;
//êâàäðàò
Paintbox2.Canvas.MoveTo(100,100);
Paintbox2.Canvas.LineTo(100,200);
Paintbox2.Canvas.LineTo(200,200);
Paintbox2.Canvas.LineTo(200,100);
Paintbox2.Canvas.LineTo(100,100);

end;
end.
с квадратами поступишь примерно так же, отношение числа С желательно подобрать более точно. Напиши получил ли ты ответ на свой вопрос
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 31.01.2007, 11:37   #6
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

квадрат может крутиться вокруг центра или должен именно 'переворачиваться' ?
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 31.01.2007, 14:15   #7
Jose
 
Регистрация: 30.01.2007
Сообщений: 5
По умолчанию

Aver, у тебя звезды не точные, но все равно спсасибо.

Speeker, у тебя в принципе замечательный код, но вот только при размере 1 звезды не совсем маленькие, хотелось бы чтоб при максимальном размере 1 зведа была очень маленькой. Большое спасибо.
Я тож на паре делал звёды, всё точно работает, вот тока звёзды некоторые далеко за paintbox улетают. Speeker, я всё таки твоим кодом возпользуюсь, если у тя будут идеи по уменьшению размера кидай их в виде кода

Virtson, квадрат не должен крутится на одном месте, он должен перекатится как квадратное колесо таким образом чтобы нижняя сторона в итоге после 2 переворачиваний оказалась с верху
Jose вне форума Ответить с цитированием
Старый 31.01.2007, 15:45   #8
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию

попробуй так:
Код:
paintbox1.Canvas.MoveTo(x,y-c);
paintbox1.Canvas.LineTo(x-5-c,y+35+2*c);
paintbox1.Canvas.LineTo(x+10+2*c,y+15-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x-10-2*c,y+15-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x+5+c,y+35+2*c);
paintbox1.Canvas.LineTo(x,y-c);
если тут с цифорками поиграться можно добиться большей пропорциональности
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 31.01.2007, 20:17   #9
Jose
 
Регистрация: 30.01.2007
Сообщений: 5
По умолчанию

paintbox1.Canvas.MoveTo(x,y-5-c);
paintbox1.Canvas.LineTo(x-c,y+2*c);
paintbox1.Canvas.LineTo(x+3+2*c,y-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x-3-2*c,y-trunc(sqrt(c)));
paintbox1.Canvas.LineTo(x+c,y+2*c);
paintbox1.Canvas.LineTo(x,y-5-c);
вот так красиво получается.
С садачей № 1 покончено, осталось квадратик покатать
Jose вне форума Ответить с цитированием
Старый 31.01.2007, 22:43   #10
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию попробуй через Матрицу поворота в двумерном пространстве

http://ru.wikipedia.org/wiki/%D0%9C%...82.D0.B2.D0.B5
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как установить компонент на Delphi 2007 Kostia Компоненты Delphi 7 06.04.2010 16:11
paintbox steck Общие вопросы Delphi 5 28.10.2007 16:15
Проблема с рисованием прямоугольника Юра. Общие вопросы Delphi 13 04.08.2007 06:08
Компонент TServerSocket в Delphi 7 dfmb Компоненты Delphi 9 03.08.2007 19:09
компонент Memo в delphi vvaassiill Помощь студентам 1 29.05.2007 20:47