Lunule – 2

La superficie delle due lunule è equiestesa all’area del triangolo ABC.

  • Mouse (posizione orizzontale): cambia la figura
  • Mouse (tasto): rivela la proprietà
  • Applicazione Java
color fSfondo, 
      fPrimo, 
      fSecondo,
      sPrimo, 
      sSecondo,
      cLettere;   
int   dx, dy; 
float xMIN, xMAX, yMAX,
      Ax,  Bx,  Cx,   Ay,  By,  Cy,  // triangolo rettangolo
      ABx, ACx, CBx,  ABy, ACy, CBy, // punti medi
      ABr, ACr, CBr;                 // raggi semicirconferenze
PFont fontLettere;

void setup()
{
   size(500, 350); 
   ellipseMode(RADIUS); 
   smooth(); 
   fontLettere=loadFont("C16.vlw"); 
   textFont(fontLettere);
   textAlign(CENTER);
   
   fSfondo=color(255, 255, 255);
   fPrimo=color(0, 0, 0);         
   sPrimo=color(0);
   fSecondo=color(0, 255, 0, 50); 
   sSecondo=color(0, 255, 0);  
   cLettere=color(0, 0, 255);  	   
   
   dx=width; 
   dy=height; 
   xMIN=dx*0.15;
   xMAX=dx*0.85; 
   yMAX=dy*.87;   
   Ax=xMIN; Ay=yMAX;
   Bx=xMAX; By=yMAX;
   ABx=dx/2; ABy=yMAX;
   ABr=dist(Ax, Ay, Bx, By)/2;

   noLoop();   
}

void mousePressed(){ redraw(); }
void mouseMoved()  { redraw(); }
void mouseDragged(){ redraw(); }

void aggiorna()
{
   Cx=constrain(mouseX, Ax, Bx);
   Cy=Ay-ABr*sin(acos((Cx-ABx)/ABr));
   
   ACx=(Ax+Cx)/2;    
   ACy=(Ay+Cy)/2;  
   ACr=dist(Ax, Ay, Cx, Cy)/2;
   CBx=(Cx+Bx)/2;    
   CBy=(Cy+By)/2;  
   CBr=dist(Cx, Cy, Bx, By)/2;
}

void draw()
{
  aggiorna(); 
  background(fSfondo);
  smooth();   
  noStroke();
    fill(fPrimo);    
    ellipse(ACx, ACy, ACr, ACr);                                    
    ellipse(CBx, CBy, CBr, CBr);                                    
  strokeWeight(2);
    stroke(fSfondo);  
    fill(fSfondo);   
    ellipse(ABx, ABy, ABr, ABr);
    quad(0, yMAX, dx, yMAX, dx, dy, 0, dy);  

  if(mousePressed)
  {
     strokeWeight(1);
        stroke(sSecondo);  
        fill(fSfondo);   
        ellipse(ABx, ABy, ABr, ABr);
     stroke(fSfondo);                    
        quad(0, yMAX, dx, yMAX, dx, dy, 0, dy);  	
     strokeWeight(2);
        stroke(sSecondo); 
        fill(fSecondo);  
        triangle(Ax, Ay, Bx, By, Cx, Cy);
     stroke(cLettere); 
        fill(cLettere);  
        ellipse(Ax, Ay, 2, 2);                   
	ellipse(Bx, By, 2, 2);
	ellipse(Cx, Cy, 2, 2);                   
	text("A", Ax-20, Ay+20);              
	text("B", Bx+20, By+20);
  
          if(Cx > ABx+100)  text("C", Cx+20, Cy-20);
     else if(Cx < ABx-100)  text("C", Cx-20, Cy-20);
     else                   text("C", Cx   , Cy-20);
  }
}