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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2012, 20:21   #1
warma2d
Пользователь
 
Аватар для warma2d
 
Регистрация: 17.12.2008
Сообщений: 50
Вопрос Построение прямой | Chart | Delphi

Здравствуйте!

Никак не могу понять: как же правильно построить просто прямую, с помощью chart в дополнение вместе c другой фигурой.

Например, мне нужно построить отдельно, только прямую.
Значит, как я понял, мне нужно: Y:=-5, а X перебрать от 0 до 2.
То есть должна получиться горизонтальная прямая.

Если я прямую строю одну, отдельно, без остальных составляющих фигуры, то всё правильно рисуется, как горизонталь.
Если я её строю в качестве дополнения вместе с другой фигурой, то рисуется фигня, прямая с углом 45.



В конечном итоге нужно получить такое:


До конца я пока не разобрался и сейчас у меня рисует только это:


то есть не хватает всего лишь двух горизонтальных прямых.



Подскажите пожалуйста: как нужно изменить код, чтобы было просто и правильно?


Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
t:Integer;
r,Xt,Yt:Real;
begin
  Series1.Clear;
  r:=StrToFloat  (Edit1.Text);
  Xt:=StrToFloat (Edit2.Text);
  Yt:=StrToFloat (Edit3.Text);
  Series1.XValues.Order:=loNone ;
  for t:=0 to 180 do Series1.AddXY( R*Sin(t*Pi/180.0),
R*Cos(t*Pi/180.0), '', clRed );
memo1.Lines.Add ('R='+FloatTostr(r));

Series1.XValues.Order:=loNone ;
 Series1.YValues.Order:=loNone ;
  for t:=0 to 1 do Series1.AddXY( -t, t, '',  clRed );
  for t:=0 to 1 do Series1.AddXY( -t, -t, '',  clRed );

  for t:=0 to 2 do Series1.AddXY( t, 1, '',  clRed );
  //for t:=0 to 1 do Series2.AddXY( -t, -t, '',  clRed );


if (xt>R) or (yt>R) then  memo1.Lines.Add ('NE VHODIT TOCHKA')
else memo1.Lines.Add ('VHODIT TOCHKA');


end;
    end.
Skype: warma2d
ICQ: 838012
mail warma2d@ya.ru

Последний раз редактировалось warma2d; 07.03.2012 в 20:26.
warma2d вне форума Ответить с цитированием
Старый 08.03.2012, 11:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Создаешь две серии а не одну
Задаешь 2D вид, и наполняешь серии данными:
Код:
const a:array[1..5,1..2] of integer=((0,-1),(-1,-1),(0,0),(-1,1),(0,1));
VAR i:double;k:integer;
begin
 Series1.XValues.Order:=loNone ;
 Series2.XValues.Order:=loNone ;
 i:=0;
 while i<(pi) do begin Series1.AddXY(sin(i),cos(i)); i:=i+pi/100; end;
 for k:=1 to 5 do Series2.AddXY(a[k,1],a[k,2]);
end;
Фигура сварная, а не цельная, так что либо рисуй сборку либо рисуй на канве без Чарта
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2012, 13:22   #3
warma2d
Пользователь
 
Аватар для warma2d
 
Регистрация: 17.12.2008
Сообщений: 50
Стрелка

Stilet, огромное Вам спасибо за помощь !
Вы молодец!
Skype: warma2d
ICQ: 838012
mail warma2d@ya.ru
warma2d вне форума Ответить с цитированием
Старый 08.03.2012, 14:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста. Этой фишке меня конструктора-машиностроители научили.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.03.2012, 14:19   #5
warma2d
Пользователь
 
Аватар для warma2d
 
Регистрация: 17.12.2008
Сообщений: 50
Стрелка

Цитата:
Сообщение от Rin
Всегда пожалуйста)).
Мне ещё нужна помощь. Если хотите, могу предложить даже вознаграждение, если поможете

Код:
unit unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, math, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Chart1: TChart;
    Series1: TLineSeries;
    Memo1: TMemo;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Series2: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


  procedure TForm1.Button1Click(Sender: TObject);
const a:array[1..5,1..2] of integer=((0,-1),(-1,-1),(0,0),(-1,1),(0,1));
VAR
i:double;
k:integer;
r,Xt,Yt:real;

begin
Series1.Clear;
Series2.Clear;
  r:=StrToFloat  (Edit1.Text);
  Xt:=StrToFloat (Edit2.Text);
  Yt:=StrToFloat (Edit3.Text);
 Series1.XValues.Order:=loNone ;
 Series2.XValues.Order:=loNone ;
 i:=0;
 while i<(pi) do begin Series1.AddXY(R*sin(i),R*cos(i)); i:=i+pi/100; end;
 for k:=1 to 5 do Series2.AddXY(a[k,1],a[k,2]);

 if (xt>R) or (yt>R) then  memo1.Lines.Add ('NE VHODIT TOCHKA')
else memo1.Lines.Add ('VHODIT TOCHKA');






end;



    end.
В этой программе, как я понимаю, вручную вбиты координаты для рисования прямых. И фигура получается по заданию правильной только в том случае, когда R радиус окружности указывается "1". Дело в том, что когда радиус вобьём, например, "3", то эти прямые как были так и останутся. Другими словами, мы увидим большую полуокружность и маленькие линии. Однако по заданию эти прямые всегда должны быть "пропорциональны" вместе с окружностью. То есть размер у горизонтальных прямых должен быть = R.
Вот в этой теме есть рисунок. Такой рисунок должен получаться всегда и при любом радиусе.
http://www.programmersforum.ru/showthread.php?t=190692
Skype: warma2d
ICQ: 838012
mail warma2d@ya.ru
warma2d вне форума Ответить с цитированием
Старый 22.03.2012, 17:54   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Напишите так
Код:
....................
 while i<(pi) do begin Series1.AddXY(R*sin(i),R*cos(i)); i:=i+pi/100; end;
a[1,2]:=a[1,2]-R;
a[2,1]:=a[2,1]-R;
a[2,2]:=a[2,2]-R;
a[4,1]:=a[4,1]-R;
a[4,2]:=a[4,2]+R;
a[5,2]:=a[5,2]+R;
for k:=1 to 5 do Series2.AddXY(a[k,1],a[k,2]);
......................
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 23.03.2012 в 13:08. Причина: ИспРРРРавиДь оЧеПятку.
Rin вне форума Ответить с цитированием
Старый 23.03.2012, 17:54   #7
warma2d
Пользователь
 
Аватар для warma2d
 
Регистрация: 17.12.2008
Сообщений: 50
Стрелка

Благодарю Rin за ответ.

Однако, остановился на таком варианте.
Спасибо Stilet
Код:
VAR
iouble;
k:integer;
r,Xt,Yt:real;

begin
Series1.Clear;
r:=50;
Series1.XValues.Order:=loNone ;
i:=0;
while i<(pi) do begin Series1.AddXY(R*sin(i),R*cos(i)); i:=i+pi/100; end;
Series1.AddXY(-r,-r);
Series1.AddXY(0,0);
Series1.AddXY(-r,r);
Series1.AddXY(0,r);
end;
Skype: warma2d
ICQ: 838012
mail warma2d@ya.ru
warma2d вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение эллипса с прямой (Delphi) 0rtega Помощь студентам 0 13.04.2010 21:45
chart (delphi) grom333 Помощь студентам 1 24.04.2009 15:09
Помогите с Chart в delphi! aks Помощь студентам 3 18.04.2009 12:38
Построение графика из StringGrid в Chart Vladya Помощь студентам 6 25.03.2009 21:00
Проблема с Chart на Delphi 6 ( Georgios Помощь студентам 6 19.01.2009 14:54