Newsgroup: it.comp.lang.delphi
Titolo: trigonometriA E ERRORI

STO CERCANDO DI CREARE UN GRAFICHETTO MA MI SCONTRO CON LA MATEMATICA.
Ricapitoliamo.
Creo un timage lungo 200 e largo 200 pixels... trovo il centro
(100,100) e a partire da centro traccio una circonferenza.... e fi qui
tutto bene.
Adesso devo inscrivere delle figure nel cerchio, quindi ho bisogno
delle coordinate dei vertici della figura.... e come li trovo?
Ricordi trigonometrici mi dicono che seno e coseno sono le coordinate
dei punti apparteneni alla circonferenza allora ho pensato
punton1.x :=cos(angolo)*raggio+100
punton1.y :=sin(angolo)*raggio+100 
i riferimenti 100 sono le coordinate del centro.....
provo a implementare un po' di codice .... relativo ad una form con
una timage e due t button.
unit FaiCerchio;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
  ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  vai:boolean;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
raggio,numerodilati,k,ang,x:integer;
punto1,punto2,punto3,punto4,centro:tpoint;
AP:array[0..360] of tpoint;
procedure disegnalinee;
begin
end;
begin
Raggio:=width div 2;
with image1 do begin
centro.x:=width div 2;
centro.y:=height div 2;
Canvas.Ellipse(0, 0,Width,Height);
canvas.moveto(centro.x,centro.y);
canvas.lineto(100,0);
canvas.moveto(centro.x,centro.y);
canvas.lineto(200,100);
canvas.moveto(centro.x,centro.y);
canvas.lineto(100,200);
canvas.moveto(centro.x,centro.y);
canvas.lineto(0,100);
canvas.moveto(centro.x,centro.y);
K:=90;
Numerodilati:=0;
Ang:=0;
repeat
inc(ang,k);
vai:=false;
label1.caption:='Angolo'+inttostr(ang);
label2.caption:='CoSeno'+floattostr(cos(ang));
label3.caption:='Seno'+floattostr(sin(ang));
label4.caption:=inttostr(numerodilati)+' Lati';
ap[numerodilati].x:=trunc(100+(sin(ang)*100));
ap[numerodilati].y:=trunc(100+(cos(ang)*100));
canvas.moveto(centro.x,centro.y);
canvas.lineto(ap[numerodilati].x,ap[numerodilati].y);
inc(numerodilati);
repeat
application.processmessages;
until vai;
until ang>359;
//canvas.Polyline(slice(ap,numerodilati));
               end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Image1.Hint:=inttostr(x)+'-'+inttostr(y);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
vai:=true;
end;
end.
e non ne esco piů fuori....
Grazie a qualche matematico comprensivo che decida di darmi una mano.
Tabelle Statistiche e Previsioni
www.geocities.com
\narciso.geo
Giochiamo con razionalitŕ!

 ha scritto nel messaggio
news:3b4be40...@news.tiscalinet.it...
: STO CERCANDO DI CREARE UN GRAFICHETTO MA MI SCONTRO CON LA MATEMATICA.
: Ricapitoliamo.
: Creo un timage lungo 200 e largo 200 pixels... trovo il centro
: (100,100) e a partire da centro traccio una circonferenza.... e fi qui
: tutto bene.
: Adesso devo inscrivere delle figure nel cerchio, quindi ho bisogno
: delle coordinate dei vertici della figura.... e come li trovo?
: Ricordi trigonometrici mi dicono che seno e coseno sono le coordinate
: dei punti apparteneni alla circonferenza allora ho pensato
:
: punton1.x :=cos(angolo)*raggio+100
: punton1.y :=sin(angolo)*raggio+100
:
l'angolo deve essere espresso in radianti.
ciao
giuliano

delle coordinate dei vertici della figura.... e come li trovo?
2*PI/(numero di vertici)
ti da' l'angolo tra il raggio che unisce un vertice al centro del
cerchio in cui e' inscritto e il raggio che unisce al centro il
vertice successivo.
L'esempio seguente disegna un poligono regolare sul tuo form
principale e il cerchio in cui esso e' inscritto :
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
  StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure DisegnaPoligonoRegolare(N : Integer ; C : TColor) ;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var N : Integer ;
begin
  N := StrToInt( InputBox( 'Inserire il numero di vertici',
                           '(N >= 3)', '3' ) ) ;
  DisegnaPoligonoRegolare( N, clBlack ) ;
  DisegnaPoligonoRegolare( 1000, clRed ) ;
end;
procedure TForm1.DisegnaPoligonoRegolare( N : Integer ; C :
TColor ) ;
var Angolo, Alpha, Raggio : Double ;
    I, X, Y, StartX, StartY : Integer ;
begin
  Canvas.Pen.Color := C ;
  StartX := 0 ;
  StartY := 0 ;
  Angolo := 2*pi/N ;
  Alpha := 0.0 ;
  Raggio := 100.0 ;
  for I := 1 to N do
  begin
    Alpha := Alpha + Angolo ;
    X := Width div 2 + Round( Raggio * cos( Alpha ) ) ;
    Y := Height div 2 + Round( Raggio * sin( Alpha ) ) ;
    if ( I = 1 ) then
    begin
      Canvas.MoveTo( X, Y ) ;
      StartX := X ;
      StartY := Y ;
    end
    else
      Canvas.LineTo( X, Y ) ;
  end ;
  Canvas.LineTo( StartX, StartY ) ;
end ;
end.
--
CyberWalkie - walkietalkie(at)
libero.it