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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2017, 15:12   #1
scorpio25
Новичок
Джуниор
 
Регистрация: 26.06.2017
Сообщений: 1
Восклицание Помогите с графикой в Delphi

Ребята, очень нужна помощь, я начинающий пользователь Delphi. И не могу разобраться с графикой.
Проблема состоит в том что по условию мне задана окружность x^2+y^2+Ax+Bx+2y+C=0 и задана свободная точка. Мне нужно найти длину касательной от свободной точки до окружности. Через Edit вводятся A, B, C и координаты свободной точки x и y. Мне нужно чтобы при расчете выводилась картинка в Image2 в виде окружности, касательной и радиуса. Причем она должна быть на математической координатной плоскости.
Вот что я смогла сделать, но понятия не имею как сделать так чтобы это отображалось на координатной плоскости((
вот код программы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, jpeg, StdCtrls, Buttons, MMSystem;

type
  TForm1 = class(TForm)
    mm1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    img1: TImage;
    img2: TImage;
    grp1: TGroupBox;
    lbl1: TLabel;
    edt1: TEdit;
    lbl2: TLabel;
    edt2: TEdit;
    lbl3: TLabel;
    edt3: TEdit;
    lbl4: TLabel;
    lbl5: TLabel;
    edt4: TEdit;
    lbl6: TLabel;
    edt5: TEdit;
    grp2: TGroupBox;
    grp3: TGroupBox;
    clrbx1: TColorBox;
    clrbx2: TColorBox;
    clrbx3: TColorBox;
    lbl7: TLabel;
    lbl8: TLabel;
    lbl9: TLabel;
    btn1: TBitBtn;
    btn2: TBitBtn;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    lbl10: TLabel;
    procedure btn1Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N13Click(Sender: TObject);

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


   var

// Глобальные переменные
Form1: TForm1;

dxe,dye:integer; // шаг экранной координатной сетки в пикселях, оцифровка
he,we:integer; // высота и ширина экранной координатной сетки в пикселях
xe,ye:integer; // текущие экранные координаты
dx,dy:real; // шаг математической координатной сетки , оцифровка
x0,y0:integer; // координаты начала матем. координатных осей
x,y:real; // текущие математические координаты
Mx,My: real;//масштабы, количество пикселей в одной математической единице
xmin,xmax,ymin,ymax:integer;// предельные математ. значения на математ. осях
a1,a2,b1,b2:integer;// координаты концов матем. осей в экранной системе координат
a,b,c,xm,ym,xa,ya,R,MO,MP:Real;

implementation

uses Unit2, Unit3, Unit4;


{$R *.dfm}




procedure TForm1.btn1Click(Sender: TObject);

begin
  dxe:=20; dye:=20; // шаг координатной сетки 20 пикселей
  he:=340;// высота экранной системы координат
  we:=460;// ширина экранной системы координат
  xmin:=-7; xmax:=11; ymin:=-7; ymax:=7;//минимальные и максимальные значения
  a1:=60; a2:=420;//приделы по оси ОХ
  b1:=40; b2:=320;//приделы по оси ОY
  dx:=1; dy:=1;//шаг математической сетки

with form1.img1.Canvas do
  begin
    // экранная система координат
    MoveTo(0,1); LineTo(we,1); // ось X
    MoveTo(1,0); LineTo(1,he); // ось Y

    // сетка и оцифровка по оси Xe, засечек нет
    xe:= dxe;
   repeat
    // MoveTo(x,y0);LineTo(x,y0+3); // засечка
    Pen.Color:=ClrBx1.Selected;//цвет сетки
    Pen.Style:=psDot; //пунктир
    MoveTo(xe,0);LineTo(xe, he); // линия сетки
    //Pen.Style:=psSolid; //сплошная линия
    xe:=xe+dxe;
   until (xe>we);

    // сетка и оцифровка по оси Ye, засечек нет
    ye:= dye;
   repeat
   //MoveTo(x0,y); LineTo(x0+3,y); // засечка
    Pen.Color:=ClrBx1.Selected;//цвет сетки
    Pen.Style:=psDot;
    MoveTo(0,ye); LineTo(we,ye); // линия сетки
    //Pen.Style:=psSolid;
    ye:=ye+dye;
   until (ye>he);

    Mx:=round((a2-a1)/(xmax-xmin));
    My:=round((b2-b1)/(ymax-ymin));

    // математическая система координат
    x0:=200; y0:=180;
    Pen.Width:=2;
    Pen.Color:=ClrBx2.Selected;//цвет сетки
    MoveTo(a1,y0); LineTo(a2,y0); // ось X
    MoveTo(x0,b1); LineTo(x0,b2); // ось Y
    // Обозначение осей
    //TextOut(x0-12,y0+5,'0');
    TextOut(a2-5,y0-15, 'X');
    TextOut(x0-15,b1+1,'Y');

    // сетка и оцифровка по оси X,
    x:= xmin;
    Pen.Width:=1;
    Pen.Style:=psSolid;
   repeat
    Xe:=round(Mx*(x-xmin)+a1);// Связь между системами координат
    if (x<>12)then TextOut(xe+5,y0+5,FloatToStr(x)); //оцифровка
    MoveTo(xe,b1);LineTo(xe, b2);  // линия сетки
    x:=x+dx;
   until (x>xmax);

    // сетка и оцифровка по оси y,
    y:= ymin;
   repeat
    Ye:=round(My*(-y+ymax)+b1);
    if (y<>7)then TextOut(x0+5,ye-15,FloatToStr(y)); //оцифровка
    MoveTo(a1,ye);LineTo(a2, ye);  // линия сетки
    y:=y+dy;
   until (y>ymax);
  end;



  begin
    a:=StrToFloat(Edt1.Text);
    b:=StrToFloat(Edt2.Text);
    c:=StrToFloat(Edt3.Text);
    xm:=StrToFloat(Edt4.Text);
    ym:=StrToFloat(Edt5.Text);
    xa:=-a/2;
    ya:=-b/2;
    R:=sqrt(Sqr(a/2)+sqr(b/2)-c);
    MO:=Sqrt(Sqr(xm-xa)+sqr(ym-ya));
    if MO>R then
      begin
        MP:=Sqrt(Sqr(MO)-sqr(R));
        lbl10.Caption:=FloatToStr(MP );
      end;
    if MO<R then
      begin
        lbl10.Caption:='Решения не существует';
      end;
    if MO=R then
      begin
        lbl10.Caption:='Длина касательной равна 0';
      end;

  end;

end;


procedure TForm1.N5Click(Sender: TObject);
begin
 Form2.ShowModal;
end;

procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N11Click(Sender: TObject);
begin
Form3.ShowModal;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
WinExec('Project2.exe', SW_SHOW);
end;

procedure TForm1.N13Click(Sender: TObject);
begin
Form4.ShowModal;
end;

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор



а вот форма:
Изображения
Тип файла: jpg Безымянный.jpg (110.4 Кб, 114 просмотров)

Последний раз редактировалось Serge_Bliznykov; 26.06.2017 в 15:52.
scorpio25 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста, помогите с графикой в Delphi pakusya Помощь студентам 2 09.12.2009 10:41
Помогите с графикой super-leon Помощь студентам 11 02.10.2009 10:14
помогите с графикой glasian Помощь студентам 8 26.06.2008 00:15
Помогите с графикой tagjik Помощь студентам 4 03.06.2008 08:05
помогите пожалуйста с графикой s014613 Помощь студентам 2 23.05.2007 15:00