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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2012, 12:57   #1
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию Платная консультация

Как ускорить процесс поворота эллипса? вопросы на victor1963@mail.ru
Я рисую мышкой эллипс, задача найти вершину эллипса, на оси OX, центр O в средине эллипса. Повара-
чивая эллипс на 0,0001 радиана, по часовой стрелке, произвожу сканирование вершины эллипса на оси OX, for x:=605 downto {593}501 do, при достижение max x, прог. заканчиваиться.
Код:
unit Krug;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Math, StdCtrls,winsock,Buttons,ShlObj,OleServer,DB,MSHTML,ShellAPI,clipbrd,ExtCtrls,
  MPlayer;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
   { procedure Form1Close(Sender: TObject; var Action: TCloseAction);}
    {procedure Form1MOUSEMOVE(Sender: TObject; Shift: TShiftState; X,
      Y: Integer); }


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  bm:TBitMap;
 {Back,} Bitmap1{Buf}:TBitMap;
 {BufRct:TRect;}
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);// DelphiWorld6/Изображение/Алгоритм опворота изображения.

Label k1,k2,k3;
type mas=array[0..1111] of integer;
var
 f:TFileStream;
 bm:TBitMap;
 a:single;
  ang:real;
W,H, x,c,r,m,l,count,count1,y:integer;
 OperBegin, OperEnd: TTimeStamp;
 Total: LongWord;
 mas1:array of mas;
 {i1,i2: integer;}


 begin
 setlength(mas1,1111);
{Buf}bm:=TBitMap.Create;
{Buf:=TBitMap;}
 {Buf.Width:=Form1.ClientWidth;
 Buf.Height:=Form1.ClientHeight;}
 bm.Width:=Form1.ClientWidth;
 bm.Height:=Form1.ClientHeight;
 {Buf}bm.LoadFromFile('c:\Program Files\Borland\Delphi6\Projects\Bitmap1.bmp');
 {bm.LoadFromResourceName(HInstance,'Krug1');
 bm.Transparent:=True;
 bm.TransParentColor:=bm.Canvas.Pixels[1,1];
 Buf.Width:=W;
 Buf.Height:=H;
 Buf.Palette:=Back.Palette;
 Buf.Canvas.CopyMode:=cmSrcCopy;
 BufRct:=Bounds(0,0,W,H);}
  {bm.Free;}
 {Buf}bm.Canvas.Draw(0,0,Bitmap1);
   with {Buf}bm.Canvas do
    begin
   OperBegin:=DateTimeToTimeStamp(Now);
 a:=0;
 bm.Canvas.Pixels[606,300]:=clBlack;
 bm.Canvas.Pixels[607,300]:=clBlack;
 bm.Canvas.Pixels[608,300]:=clBlack;
 bm.Canvas.Pixels[609,300]:=clBlack;

 bm.Canvas.Pixels[594,291]:=clBlack;
 bm.Canvas.Pixels[596,294]:=clBlack;
 bm.Canvas.Pixels[598,297]:=clBlack;
 bm.Canvas.Pixels[600,300]:=clBlack;
 bm.Canvas.Pixels[598,303]:=clBlack;
 bm.Canvas.Pixels[596,306]:=clBlack;
 bm.Canvas.Pixels[594,309]:=clBlack;
 for x{i1}:=0 to 1024 do
 for y{i2}:=0 to 656 do
 begin
 mas1[x{i1},y{i2}]:=bm.Canvas.Pixels[x{i1},y{i2}];//paintbox1.Canvas.Pixels[i1,i2]:=mas1[i1,i2];
 end;

  l:=0;
  k1:count:=0;
  k2:x:=500;
  y:=300;
  m:=0;
  ang:=6.28218;
  for r:=102  downto {93}1 do
 begin
  c:=mas1[round(x+r*cos(6.28318)),round(y+r*sin(6.28318))];
  if c=clBlack then
   begin
  m:=r;
 mas1[round(x+r*cos(6.28318)),round(y+r*sin(6.28318))]:=clWhite;
 end;
  end;
  While ang>(0.01) do
 begin
 for r:={50}1 to 105 do
  begin
  c:=mas1[round(x+r*cos(ang)),round(y+r*sin(ang))];
  if c=clBlack then
   begin
    mas1[round(x+r*cos(ang+0.01)),round(y+r*sin(ang+0.01))]:=clBlack;
    mas1[round(x+r*cos(ang)),round(y+r*sin(ang))]:=clWhite;
    end;
     end;
      ang:=ang-{0.01}0.0001;
      end;
 mas1[round(x+m*cos(6.28318+0.01)),round(y+m*sin(6.28318+0.01))]:=clBlack;//Установка первой точки по час.
 begin
 for x:=605 downto {593}501 do
 begin
  c:=mas1[x,300];
  if (c=clBlack) and (x>=l) then
   begin
   l:=x;
   goto k1;
   end;
    end;
    count:=count+1;
   if count<5 then
    begin
    goto k2;
    end
   else
    begin
    goto k3;
     end;
      end;
 k3:count1:=0;
 ListBox1.Items.Add('Финиш');
 OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
 ListBox1.Items.Add(IntToStr(Total)+'  MSec');
 { bm.Free;}
  {Bitmap1.Free;}
 {Application.ProcessMessages;}
 {Buf}bm.SaveToFile('c:\Program Files\Borland\Delphi6\Projects\FormImage.bmp');
   {bm.Free;}
end;
for x{i1}:=0 to 1024 do
for y{i2}:=0 to 656 do
bm.Canvas.Pixels[x{i1},y{i2}]:=mas1[x{i1},y{i2}];
   Form1.Canvas.Draw(0,0,{Buf}bm);
   
 end;

Последний раз редактировалось ACE Valery; 22.02.2012 в 00:23.
Victor1963 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна платная консультация! Lef Фриланс 0 26.10.2011 01:17
Платная страница. oboroten09@ Фриланс 2 14.01.2010 21:58
Платная страница. oboroten09 Общие вопросы Delphi 2 14.01.2010 16:02