Вход через социальные сети

  • 24.04.2014, 23:32
    0 up down
    Сообщение
    101 в 24.4.2014, 21:01 написал(а): link

    Image1.Canvas.MoveTo(Trunc(Sin(x)),Trunc(y));
    Image1.Canvas.LineTo(Trunc(Sin(x))+x0,Trunc(y)+y0);

    Поскольку Trunc возвращает целую часть числа, а синус не превосходит единицу, то Trunc(Sin(x))=0
    и Trunc(y)=0, т.к. y=sin(x).
    Поэтому процитированные команды эквивалентны следующим:
    Image1.Canvas.MoveTo(0,0);
    Image1.Canvas.LineTo(x0,y0);
    Первое выполнение лайнту чертит линию из левого верхнего угла в центр,
    а все последующие - долбят центр. Smile
  • 25.04.2014, 14:44
    0 up down
    Сообщение
    Гришпута в 24.4.2014, 21:32 написал(а): link

    101 в 24.4.2014, 21:01 написал(а): link

    Image1.Canvas.MoveTo(Trunc(Sin(x)),Trunc(y));
    Image1.Canvas.LineTo(Trunc(Sin(x))+x0,Trunc(y)+y0);

    Поскольку Trunc возвращает целую часть числа, а синус не превосходит единицу, то Trunc(Sin(x))=0
    и Trunc(y)=0, т.к. y=sin(x).
    Поэтому процитированные команды эквивалентны следующим:
    Image1.Canvas.MoveTo(0,0);
    Image1.Canvas.LineTo(x0,y0);
    Первое выполнение лайнту чертит линию из левого верхнего угла в центр,
    а все последующие - долбят центр. Smile

    Спасибо за замечание, этого я действительно не заметил.
  • 25.04.2014, 14:52
    0 up down
    Сообщение
    101 в 25.4.2014, 13:44 написал(а): link

    Спасибо за замечание, этого я действительно не заметил.

    Даже если вы отмасштабируете, чтобы выйти в область целых чисел, - будете вычислять, скажем,
    100sinx, то, боюсь, с вашим подходом может опять получиться прямая.
    Сейчас спешу, некогда расписывать, надеюсь, сами догадаетесь.
    Вечером, если что.
  • 25.04.2014, 21:10
    0 up down
    Сообщение
    Гришпута в 25.4.2014, 13:52 написал(а): link

    Вечером, если что.

    Ловите и разбирайтесь. Smile Сделано, правда, в Lazarus, но синтаксис идентичен Delphi.
    Код

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var x0,y0,x,y:integer;
    mg:real;
    begin
    x0:=Image1.Width div 2;
    y0:=Image1.Height div 2;
    Image1.Canvas.Brush.Color:=$FFFFFF;
    Image1.Canvas.FillRect(Rect(0,0,Width,Height));
    Image1.Canvas.MoveTo(x0,0);
    Image1.Canvas.LineTo(x0,Image1.Height);
    Image1.Canvas.MoveTo(0,y0);
    Image1.Canvas.LineTo(Image1.Width,y0);
    mg:=2*pi()/x0;
    x:=0;
    y:=round((y0-1)*sin((x-x0)*mg));
    Image1.Canvas.MoveTo(x,Image1.Height-(y+y0));
    for x:=1 to Image1.Width do begin
    y:=round((y0-1)*sin((x-x0)*mg));
    Image1.Canvas.LineTo(x,Image1.Height-(y+y0));
    end;
    end;
  • 27.04.2014, 22:16
    0 up down
    Сообщение
    Гришпута в 25.4.2014, 19:10 написал(а): link

    Гришпута в 25.4.2014, 13:52 написал(а): link

    Вечером, если что.

    Ловите и разбирайтесь. Smile Сделано, правда, в Lazarus, но синтаксис идентичен Delphi.
    Код

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var x0,y0,x,y:integer;
    mg:real;
    begin
    x0:=Image1.Width div 2;
    y0:=Image1.Height div 2;
    Image1.Canvas.Brush.Color:=$FFFFFF;
    Image1.Canvas.FillRect(Rect(0,0,Width,Height));
    Image1.Canvas.MoveTo(x0,0);
    Image1.Canvas.LineTo(x0,Image1.Height);
    Image1.Canvas.MoveTo(0,y0);
    Image1.Canvas.LineTo(Image1.Width,y0);
    mg:=2*pi()/x0;
    x:=0;
    y:=round((y0-1)*sin((x-x0)*mg));
    Image1.Canvas.MoveTo(x,Image1.Height-(y+y0));
    for x:=1 to Image1.Width do begin
    y:=round((y0-1)*sin((x-x0)*mg));
    Image1.Canvas.LineTo(x,Image1.Height-(y+y0));
    end;
    end;


    Спасибо большое за программу.
  • 27.04.2014, 23:17
    0 up down
    Сообщение
    Заливка фона белым цветом:
    Гришпута в 25.4.2014, 20:10 написал(а): link

    Image1.Canvas.Brush.Color:=$FFFFFF;
    Image1.Canvas.FillRect(Rect(0,0,Width,Height));

    В Lazarus, который у меня, фон по умолчанию черный.
    В Delphi эти команды, если не изменяет память, излишни.
    Излишне, кстати, и Rect в скобках (как оно у меня туда попало? Smile )
    Вообще, я тут пустил петуха. Странно, что сработало.
    Корректно так: Image1.Canvas.FillRect(0,0,Image1.Width,Image1.Height)