Корректировка графиков тангенса и котангенса

MaX1MuS

Строю графики тангенса и котангенса. Все бы ничего, но возникают линии между блоками, а этого быть не должно. Как это устранить?
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons,
  TeeFunci, Math;
 
type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    BitBtn1: TBitBtn;
    Series2: TLineSeries;
    BitBtn2: TBitBtn;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    Label1: TLabel;
    GroupBox2: TGroupBox;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    RadioButton6: TRadioButton;
    RadioButton7: TRadioButton;
    Label2: TLabel;
    RadioButton8: TRadioButton;
    RadioButton9: TRadioButton;
    Label3: TLabel;
    RadioButton10: TRadioButton;
    RadioButton11: TRadioButton;
    RadioButton12: TRadioButton;
    RadioButton13: TRadioButton;
    Edit1: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Button1: TButton;
    RadioButton14: TRadioButton;
    RadioButton15: TRadioButton;
   
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
BitBtn2.Enabled:=false;
Radiobutton1.Checked:=true;
Radiobutton2.Checked:=true;
end;
 
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Series2.Clear;
end;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
var
 i, f: extended;
 c: tcolor;
 s:string;
 label
   M1;
  begin
  Series2.Clear;
  s:=edit1.text;
  Series2.LinePen.Width:=strtoint(edit1.text);
  i:=-30;
  while i<=30 do
  begin
  c:=clgreen;
  if RadioButton1.Checked then f:=sin(i);
  if RadioButton5.Checked then f:=cos(i);
  if RadioButton6.Checked then f:=sin(i)/cos(i);
  if RadioButton7.Checked then f:=cos(i)/sin(i);
  if (RadioButton8.Checked) and (i>0) then f:=ln(i);
  if (RadioButton8.Checked) and (i<=0) then goto M1;
  if RadioButton9.Checked then f:=exp(i);
  if RadioButton2.Checked then c:=clred;
  if RadioButton3.Checked then c:=clgreen;
  if RadioButton4.Checked then c:=clblue;
  if RadioButton13.Checked then c:=clyellow;
  if RadioButton14.Checked then c:=clblack;
  if RadioButton15.Checked then c:=clpurple;
  if RadioButton10.Checked then f:=power(i,2);
  if RadioButton11.Checked then f:=power(i,3);
  if (RadioButton12.Checked) and (i<>0) then f:=1/i;
  if (RadioButton12.Checked) and (i=0) then goto M1;
  Series2.AddXY(i, f, '', c);
  M1:
  i:=i+0.0001;
  end;
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.close;
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
if (edit1.text='1') or (edit1.text='2') or (edit1.text='3') or (edit1.text='4') or (edit1.text='5') or (edit1.text='6') or (edit1.text='7') or (edit1.text='8') or (edit1.text='9') then
BitBtn2.Enabled:=True
else BitBtn2.Enabled:=false;
end;
 
end.
3 ответа

MaX1MuS

MaX1MuS, используйте разные серии. Или рисуйте руками на канве.Или, особо извращённо.Один промежуток рисуйте в положительном направлении, например от пи/2 до 3пи/2, а следующий рисуйте в отрицательном, т.е. от 5пи/2 до 3пи/2. В итоге у Вас эти соединительные линии будут сверху и снизу и не будут пересекать ось Ох.


MaX1MuS

Valenth, Нашел выход-таки) использование Series2.AddNullXY(i, f, '') =) Ну все равно спасибо.


MaX1MuS

Series2.AddNullXY(i, f, '')
Оно прерывает график? Будем знать) Я прост не пользуюсь ТЧартом.