FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Pintar una elipte dada dos coordenadas, sin utilizar la funcion que viene en delphi
Hola, ¿Alguien sabe un algorimo para dibujar una elipse de puntos dada dos coordenadas?. He estado probando con este algortimo pero tengo problemas porque la elipse no pasa por las coordenadas indicadas en a y b.
Punto es un registro que contiene la coordenada x e y. procedure TFormDibujo.initSnakeEllipse(a,b: punto); var i,semiaxis_a,semiaxis_b,center_x,center_y,x,y:integer; ang:real; begin semiaxis_a := round((b.x - a.x) / 2); semiaxis_b := round((b.y - a.y) / 2); center_x := a.x + semiaxis_a; center_y := a.y + semiaxis_b; ang := 2*PI / numPoints; for i:= 0 to numPoints-1 do begin x := round(semiaxis_a * cos (ang * i)); y := round(semiaxis_b * sin (ang * i)); ListaP[i].x:=center_x + x; ListaP[i].y:=center_y + y; ListaP[i].alpha:=Alfa;//DEFAULT_ALPHA; ListaP[i].beta:=Beta;//DEFAULT_BETA; ListaP[i].gamma:=Gamma;//DEFAULT_GAMMA; end; end; Por ultimo dibujo con el algoritmo i:integer; for i:= 0 to numPoints-1 do begin BitmapTrab.Canvas.pen.Color := clGreen; BitmapTrab.Canvas.Ellipse(ListaP[i].X-3,ListaP[i].Y-3,ListaP[i].X+3,ListaP[i].Y+3); BitmapTrab.Canvas.Pixels[ListaP[i].X,ListaP[i].Y]:=clYellow; BitmapTrab.Canvas.MoveTo(ListaP[i].X,ListaP[i].Y); if (i=numPoints-1) then BitmapTrab.Canvas.LineTo(ListaP[0].X,ListaP[0].Y) else BitmapTrab.Canvas.LineTo(ListaP[i+1].X,ListaP[i+1].Y); end; |
|
|
|