download programma download Delphi project een katten-oog indicator ook genoemd cat's eye of magic eye, is een a fluorescerende cathodestraal buis gebruiktvoor de afstemming van radio ontvangers.
De afbeelding hieronder toont het oog in werking: Tekenen geschiedt op een TImage component. De rotation knop (eigen maak) levert een getal van 0..100 als percentage van de cirkel. De reset knop geeft het TImage canvas de kleur van het form.. Tekenen van het kattenoog verandert geen pixels buiten de cirkel. Analyse Variable i stapt van height-1 naar 0. Het tekenen gaat met horizontale lijnen voor elke waarde van i. Middelpunt C heeft coördinaten (0,0) bij de berekeningen. Straal r := height div 2. Hoek a (radialen) hangt af van het percentage v. a := 0.01*v*pi {pi = 180 graden} ta := tan(a) de helling van de lijn CA. De vertikale ordinaat van A is ybound := round(r*(1+cos(a))) x1,x2 worden voor elke waarde van i berekend. x2 := round(sqrt(r2 - sqr(i-r)))..........op de cirkel x1 := round((i-r)*ta).....................op de lijn De volgende gevallen treden op:
2. wit: -x2 .. -x1, rood: -x1 .. x1, wit: x1 .. x2 3. rood: -x2 .. -x1, wit -x1 .. x1,rood: x1 .. x2 4. wit: -x2 .. x2 Deze gevallen worden bepaald door twee vlaggen (Booleaanse variabelen): BF := i > ybound RF := i > r De kleuren c1,c2 hangen af van BF,RF procedure line(xstart,xend,color ) tekent een lijn voor y = i Bij de x-ordinaat wordt r geteld. Tenslotte wordt een zwarte cirkel getekend. Voor (BF xor RF)=true zijn drie lijnen nodig, anders één. Image dimensies Breedte en hoogte kunnen variëren.Maak wel de breedte gelijk aan de hoogte. Beter is om breedte en hoogte oneven te maken zodat middelpunt C ook echt het midden is. De teken procedure procedure paintCatsEye(v : byte); //v is percentage 0..100 var i,r,r2,x1,x2,ybound : smallInt; a,ta : single; BF,RF : boolean; c1,c2 : dword; //colors procedure line(a,b: smallInt; col : dword); begin with form1.Image1.Canvas do begin pen.Color := col; moveto(a+r,i); lineto(b+r,i); end; end; begin with form1.Image1 do begin r := width shr 1; r2 := r*r; a := 0.01*v*pi; //angle in radians if v = 50 then ta := 10000 else ta := tan(a); ybound := round(r*(1+cos(a))); for i := height-1 downto 0 do begin BF := i > ybound; RF := i > r; x2 := round(sqrt(r2 - sqr(i-r))); if BF then begin c1 := $ff; c2 := $ffffff; end else begin c1 := $ffffff; c2 := $ff; end; if RF xor BF then begin x1 := round((i-r)*ta); line(-x2,-x1,c1); line(-x1,x1,c2); line(x1,x2,c1); end else line(-x2,x2,c1); end;//for i with canvas do begin brush.style := bsClear; pen.color := 0; ellipse(0,0,width,height); end; end;//with end; Het image initialiseren procedure InitCatsEye; begin with form1.Image1 do with canvas do begin brush.style := bsSolid; brush.Color := form1.Canvas.Brush.color; fillrect(rect(0,0,width,height)); end; end;Tot zover deze beschrijving van het katten-oog tekenen. Een beschrijving van de rotation button is [HIER] te vinden. |
||||||||||