anamorfosi conica -...

14
Anamorfosi conica Rossetto Silvano Preludio. Si prende una sezione quadrata di una foto digitale e la si rielabora con un programma al computer. L’effetto può essere inquietante: è difficile dire che sia migliorativo per quanto discutibile possa essere l’originale … Poniamo ora uno specchio di forma conica sopra il disco azzurro e osserviamo l’immagine riflessa mettendo l’occhio sulla sua verticale ad una altezza di 40-50 cm. La figura deformata si ricompone perfettamente sullo specchio. Ci chiediamo come costruire il programma che legga la foto originale e la trasformi (anamorfosi) in modo che lo specchio a cono la possa ricostruire. Possiamo partire dall’ultima immagine, che mostra l’anamorfosi e, al centro, la figura ricomposta, e cercare di esprimere con una formula la relazione tra i punti interni alla circonferenza blu e i punti esterni. Il programma scorre tutti i punti della figura reale, ne legge il colore, calcola il punto corrispondente nella trasformazione e gli assegna il colore letto ottenendo la figura anamorfica.

Upload: dotram

Post on 16-Feb-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Anamorfosi conica

Rossetto Silvano

Preludio.

Si prende una sezione quadrata di una foto digitale e la si rielabora con un programma al computer.

L’effetto può essere inquietante: è difficile dire che sia migliorativo per quanto discutibile possa

essere l’originale …

Poniamo ora uno specchio di forma conica sopra il disco

azzurro e osserviamo l’immagine riflessa mettendo

l’occhio sulla sua verticale ad una altezza di 40-50 cm.

La figura deformata si ricompone perfettamente sullo

specchio.

Ci chiediamo come costruire il programma che legga la foto originale e la trasformi (anamorfosi) in

modo che lo specchio a cono la possa ricostruire.

Possiamo partire dall’ultima immagine, che mostra l’anamorfosi e, al centro, la figura ricomposta, e

cercare di esprimere con una formula la relazione tra i punti interni alla circonferenza blu e i punti

esterni.

Il programma scorre tutti i punti della figura reale, ne legge il colore, calcola il punto corrispondente

nella trasformazione e gli assegna il colore letto ottenendo la figura anamorfica.

Page 2: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Parte prima. L’anamorfosi con CABRI

La figura mostra la corrispondenza tra il punto reale

P’, della figura anamorfica; e il punto P ricostruito

dallo specchio a cono attraverso la riflessione del

raggio di luce P’M nel punto di osservazione V.

Il punto P è la proiezione del raggio riflesso MV sulla

base del cono.

Data la simmetria del cono rispetto al suo asse, le

considerazioni geometriche passano dallo spazio al

piano che contiene l’asse e i punti P e P’. La

corrispondenza cercata riguarda quindi la distanza dei

punti P e P’ dal centro O della base del cono.

Rispetto al piano che contiene la base del cono, i due

punti P e P’ si trovano sulla retta radiale del cerchio

base del cono.

Il cono è caratterizzato dal raggio OR e dall'altezza

OH.

Possiamo costruire la figura della sezione del cono in modo da osservare ‘dinamicamente’ come si

corrispondono i due punti P e P’

Questi sono i passi della costruzione con un programma come CABRI.

O e R punti liberi;

retta a per OR, retta b ⊥ a passante per O;

H e V punti liberi su b;

R' simmetrico di R rispetto ad O;

triangolo RR'H;

segmento OR, P su OR;

segmento VP, M = VP ∩ HR;

Q simmetrico di P rispetto a HR;

retta c per H e Q;

P' = c ∩ a

Page 3: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Ora riportiamo sul piano la costruzione della corrispondenza anamorfica, in modo da osservarne

qualche proprietà:

Nuova costruzione.

O’ e Q liberi sul piano.

O, R liberi, a semiretta di origina O e passante per R

retta b ⊥ a, H e V su B

R’ simmetrico di R rispetto a O, triangolo R V R’

circonferenza (compasso) di centro O’ e raggio OR

Γ circonferenza (compasso) di centro O e raggio O’Q

P = Γ ∩ a

traccio la retta PV

retta t simmetrica di PV rispetto a HR

P’ = t ∩ a

Γ1 circonferenza (compasso) di centro O’ e raggio OP’

traccio r semiretta O’Q

Q’ = Γ1 ∩ r

La costruzione è ‘buona’ perché trova la corrispondenza tra Q e Q’ indipendentemente dal fatto che

siano dentro o fuori la circonferenza di base. I punti R, H e V permettono di variare dinamicamente

i parametri dello specchio conico e in modo da poter osservare come varia la relazione tra Q e Q’

Infine possiamo vincolare Q a figure geometriche (segmenti, circonferenze, poligoni …) e tracciare

il luogo di Q’ al variare di Q.

La costruzione permette di fare qualche osservazione in modo ‘virtuale’ da verificare poi con i

conetti a specchio.

Page 4: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Ecco alcuni esempi delle figure trasformate.

La circonferenza azzurra indica la base del cono; si

possono osservare il bordo del ‘semipiano ’verde’, il

cerchio rosso che non contiene il centro della base del

cono e quello blu che invece lo contiene.

Poiché l’anamorfosi effettua una speciale inversione

della base del cono, si può notare che una figura, che

contiene il centro della base, viene proiettata verso

l’esterno nella figura anamorfica e appare con un

‘buco’ (vedi le aree blu e bianca), mentre una figura

che non lo contiene mantiene la convessità.

Page 5: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Parte seconda. Alla ricerca delle formule con DERIVE

Riprendiamo la figura iniziale fatta con CABRI.

Si vuole esprimere la lunghezza del segmento OP’ in funzione della

lunghezza del segmento OP.

Possiamo riferire la figura al piano cartesiano di assi OR e OH.

Si tratta quindi di esprimere l’ascissa di P’ in funzione di quella di P.

La retta P’M è simmetrica della retta PM rispetto al segmento HR.

Si può procedere in questo modo:

1. calcolare le coordinate di P’’, simmetrico di P rispetto al

segmento HR;

2. calcolare M = PV ∩ RH;

3. calcolare l’equazione della retta r (MP’’);

4. calcolare P’ = r ∩ Ox e prenderne l’ascissa.

I passi sono concettualmente semplici, ma piuttosto laboriosi come calcolo algebrico: possiamo

ricorrere ad un programma di calcolo simbolico come Derive.

Calcolo delle coordinate del punto simmetrico P’’ al punto P rispetto all retta (RH).

Predisponiamo in DERIVE la definizione della funzione RETTA(p,q) che produce l’equazione in

forma esplicita della retta per due punti.

La riga #1 calcola l’equazione della retta dati un punto e la

pendenza; la riga #2 calcola il coefficiente angolare dati due

punti e la riga #3 produce l’equazione della retta mettendo

insieme le due funzioni precedenti.

La riga #4 calcola l’equazione della retta che genera la

superficie del cono. Il risultato è in #5.

Dati i punti A e B, vogliamo calcolare le equazioni della

simmetria assiale rispetto alla retta (AB).

Le righe #8 e #9 definiscono due punti generici P0 e P1 che si

corrisponderanno nella simmetria assiale.

Le righe #10 e #11 definiscono in modo generico due punti dell’asse

di simmetria; la riga #12 calcoal (riga #13) l’equazione dell’asse.

Le equazioni della simmetria assiale rispetto alla retta (AB) si possono trovare mettendo a sistema

le due condizioni:

1. le rette (AB) e (P0P1) sono perpendicolari e quindi i coefficienti sono reciproci ed opposti;

2. il punto medio di P0P1 appartiene alla retta (AB)

Le due condizioni si esprimono con il sistema

Page 6: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

La cui soluzione ‘generale’ è:

… terribile, si immagini di doverla calcolare a mano, ma con DERIVE …

Imponendo le condizioni del nostro problema: A=(r,0), B=(0,h), P0=(x0,0), le due equazioni si

riducono:

fornendo le coordinate del punto P’’ simmetrico di P

rispetto alla retta (RH) generatrice del cono a specchio.

Calcolare M = PV ∩ RH

Per calcolare il punto P in cui il raggio che parte dal punto P’ si riflette per raggiungere il punto di

vista V occorre risolvere il sistema tra le rette (PV) e (RH):

Calcolare l’ascissa di P’ in funzione dell’ascissa di P e dei parametri del cono

Siamo ora in grado di calcolare l’ascissa del punto P’ e quindi di esprimere analiticamente la

relazione tra il punto P e il suo anamorfico P’: basta calcolare l’equazione della retta (MP’’), righe

#21 e #22) ed intersecarla con l’asse delle ascisse (righe #23 e #24).

Page 7: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Ecco pronta la funzione che permette di calcolare la distanza di un punto anamorfico dal centro del

cono ‘generatore’ a partire da quella del punto reale.

Prima di applicare la funzione ad un programma che generi la trasformazione, ne osserviamo per

via algebrica qualche proprietà e qualche caso speciale in relazione ai parametri del cono.

Definiamo la funzione DIST_ANAM(x)

che calcola la distanza del punto

anamorfico data la distanza x del punto

reale.

I punti che stanno sul bordo della base del

cono sono fissi (righe #26 e #27)

Nella trasformazione anamorfica il centro della base del cono non

ha un unico punto corrispondente perché per il centro passano

tutte le rette radiali. Possiamo però dire che tutti i punti di questo

insieme hanno la stessa distanza dal centro. Si osservi che questa è

la distanza massima dei punti anamorfici che definisce quindi il

disco immagine della base del cono. E’ interessante notare che il

disco immagine ha un raggio che dipende SOLO dai parametri del cono (raggio r e altezza h), ma

NON dal punto di osservazione dal quale osserviamo la figura.

Due domande: cosa succede quando h < r e cosa quando h = r?

Gli specchi a cono della collezione

sono a sezione equilatera.

Il disco anamorfico ha raggio 3r, a

destra la dimostrazione senza parole.

Domanda: qual è lo sviluppo della superficie laterale di questi

coni?

Page 8: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Parte terza. Anamorfosi – inversione circolare: torniamo in CABRI

Analizziamo il caso particolare di h=r,

cioè di un cono retto.

La funzione della distanza si riduce

drasticamente.

Si può anche osservare che il disco

immagine ha in questo caso raggio

infinito.

Il fattore (r-v), che compare nella funzione distanza, suggerisce un’ulteriore caso particolare: v = r

che corrisponde a mettere l’occhio esattamente sul vertice del cono (… non raccomandato,

potremmo pensarlo come caso limite da osservare con una fotocamera digitale).

In queste condizioni la funzione si riduce ulteriormente:

ponendo v = r, la funzione si riduce alla semplicissima

forma r2/x che caratterizza l’inversione circolare

E’ immediato osservare che l’inversione circolare è

INVOLUTORIA, ossia AUTOINVERSA …

Possiamo tornare in CABRI e confermare questa essenziale caratteristica che distingue la generica

anamorfosi dal caso limite dell’inversione circolare. E’ utile, per questo scopo, ridefinire la

costruzione dell’anamorfosi conica in modo da utilizzarla come ‘macro’ e poterla applicare a punti

diversi. Il file anamorfosi_macro.fig mostra la costruzione della macro utilizzata poi nel file

verso_inversione_circolare.fig con il quale si ottengono le due figure seguenti.

Nella figura a sinistra il punto Q, vincolato alla circonferenza blu, viene trasformato nel punto Q’.

Il punto Q’ traccia il luogo ‘rosso’ al variare di Q nella sua circonferenza. Se trasformiamo Q’in

Q’’, applicando la stessa anamorfosi, il nuovo punto genera, al variare di Q, il luogo ‘verde’.

Q’’ non coincide con Q e il suo luogo non si sovrappone alla circonferenza blu.

Quando si spostano i punti H e V in modo che il cono sia retto e V (punto di vista) stia su H (vertice

del cono), Q’’ coincide con Q e quindi il suo luogo si sovrappone alla circonferenza blu.

(in realtà, l’anamorfosi conica è sempre involutoria, basta mettere l’occhio sul vertice … lo si può

verificare geometricamente con CABRI e algebricamente con DERIVE)

Page 9: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Alla ricerca della costruzione più bella

L’inversione circolare apre un fronte molto ampio di domande. Eccone alcune:

1. Costruzioni alternative dell’inversione circolare

a. adattando l’anamorfosi al caso particolare:

b. seconda alternativa …

c. terza alternativa …

d. altre? Vedi figure cabri

Page 10: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

In una inversione circolare a cosa corrispondono le rette?

Si può costruire con CABRI una macro basata su una delle costruzioni precedenti (data una

circonferenza) oppure anche usare la costruzione INVERSIONE predefinita

Il punto P’ è l’inverso rispetto alla circonferenza blu

del punto P vincolato alla retta verde.

Il luogo geometrico di P’, quando P si muove sulla

retta, è la circonferenza rossa che passa per il centro

della circonferenza base dell’inversione.

Nell’inversione circolare, a rette corrispondono

circonferenze che passano per il centro della

circonferenza base.

L’inversione circolare definisce una geometria

nella quale le rette sono circonferenze che passano

per un punto fisso (centro dell’inversione).

Si conservano gli angoli, ma non le distanze (che

dipendono dalla circonferenza base). Nel piano

inverso possiamo considerare come angolo tra due

‘rette’ (circonferenze che passano per il centro

dell’inversione) l’angolo delle rispettive rette

(euclidee) tangenti.

Page 11: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Parte quarta. Dalla formula al programma: clik – trasforma – stampa … ooooh …

L’aspetto è ‘tecnico’ e il tempo a disposizione insufficiente. Ci limitiamo a riportare il programma

in pascal che utilizza la formula della distanza del punto anamorfico per produrre la figura

trasformata.

unit anamorfosi;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls,unit3,unit4;

type

TForm1 = class(TForm)

open1: TOpenDialog;

save1: TSaveDialog;

dati_cono: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Bottone_calcola: TButton;

Bottone_Apri: TButton;

procedure Bottone_calcolaClick(Sender: TObject);

procedure Bottone_ApriClick(Sender: TObject);

procedure calcola;

procedure colora(i,j,x,y:integer);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

controllo_file:boolean;

file_in,file_out:string;

bitmap_in:tbitmap;

bitmap_out:tbitmap;

di,de,v,h,r:real;

larg_bmp:integer;

scala_video:real;

implementation

{$R *.DFM}

procedure TForm1.Bottone_calcolaClick(Sender: TObject);

var err:integer;

begin

if Controllo_file=false then

begin

Page 12: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

Open1.execute;

File_in:=open1.FileName;

end;

bitmap_in.loadfromfile(file_in);

(* lettura dimensioni della bitmap*)

larg_bmp:=bitmap_in.Width;

(* lettura delle dimensioni del cono*)

val(edit1.text,r,err);

val(edit2.text,h,err);

val(edit3.Text,v,err);

calcola;

end;

procedure TForm1.Bottone_ApriClick(Sender: TObject);

var rgn:hrgn;

rct:trect;

begin

file_in:='';

Open1.execute;

File_in:=open1.FileName;

if file_in <> '' then

controllo_file:=true;

form_in.visible:=true;

bitmap_in.loadfromfile(file_in);

rct:=rect(0,0,form_in.clientwidth,form_in.clientwidth);

rgn:=createEllipticrgn(0,0,form_in.clientwidth,form_in.clientwidth);

selectcliprgn(form_in.img_in.canvas.Handle,rgn);

form_in.img_in.canvas.stretchdraw(rct,bitmap_in);

end;

function distanza_int(de,r,h,v:real):real;

begin

distanza_int:=v*(2*h*h*r-de*(h*h-r*r))/(2*de*h*r+h*h*v-2*h*r*r+r*r*v);

end;

procedure tform1.colora(i,j,x,y:integer);

var i1,j1:integer;

begin

bitmap_out.canvas.pixels[i,j]:=bitmap_in.canvas.pixels[x,y];

with form4 do

begin

i1:=round(i*scala_video)+img_out.left;

j1:=round(j*scala_video)+img_out.top;

canvas.Pixels[i1,j1]:=bitmap_in.canvas.pixels[x,y];

img_out.canvas.Pixels[i1-img_out.left,j1-

img_out.top]:=bitmap_in.canvas.pixels[x,y];

end;

end;

(* Calcolo partendo dalle coordinate del punto anamorfico la

posizione del punto reale leggendone il colore lo assegno

al punto di partenza *)

procedure Tform1.calcola;

Page 13: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

var i,j,x,y,R_PX:integer;

h_px,v_px:real;

larg_bmp_anam:real;

larg_reale:real;

s:string;

l_med:integer;

alfa:real;

begin

(* avendo dato le dimensioni del cono in cm le riferisco alla dim.

in px della figura *)

r_px:=ROUND(larg_bmp/2);

h_px:=h*r_px/r;

v_px:=v*r_px/r;

(* larg_bmp_anam = dimensione max della bitmap anamorfica

nel ciclo poi considero il valore medio l_med*)

larg_bmp_anam:=2*h_px*h_px*r_px/(h_px*h_px-r_px*r_px);

larg_reale:=2*h*h*r/(h*h-r*r)*2;

str(larg_reale:0:1,s);

form4.label2.caption:=s;

l_med:=round(larg_bmp_anam);

(* definisco le dimensioni della bitmap di uscita *)

bitmap_out.width:=round(larg_bmp_anam*2);

bitmap_out.height:=round(larg_bmp_anam*2);

scala_video:=FORM4.img_out.WIDTh/bitmap_out.width;

form4.visible:=true;

(* calcolo la posizione del generico punto di coordinate {i,j} e

verifico che la de sia esterna al raggio del cono e la corrispettiva

di sia interna a questo *)

for i:=0 to l_med do

for j:=0 to l_med do

begin

de:=sqrt(i*i+j*j);

di:=distanza_int(de,r_px,h_px,v_px);

if (de>=r_px) and (de<=l_med) then

begin

if i>0 then

alfa:=arctan(j/i)

else

alfa:=0;

x:=round(di*cos(alfa));

y:=round(di*sin(alfa));

colora(l_med+i,l_med-j,r_px+x,r_px-y);

colora(l_med+i,l_med+j,r_px+x,r_px+y);

colora(l_med-i,l_med-j,r_px-x,r_px-y);

colora(l_med-i,l_med+j,r_px-x,r_px+y);

end

else

begin

Page 14: Anamorfosi conica - giovani.mathesisvicenza.itgiovani.mathesisvicenza.it/wp-content/.../05/Anamorfosi-conica.pdf · verso_inversione_circolare.fig con il quale si ottengono le due

bitmap_out.canvas.Pixels[l_med+i,l_med-j]:=clwhite;

bitmap_out.canvas.Pixels[l_med+i,l_med+j]:=clwhite;

bitmap_out.canvas.Pixels[l_med-i,l_med-j]:=clwhite;

bitmap_out.canvas.Pixels[l_med-i,l_med+j]:=clwhite;

end;

end;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

bitmap_in:=tbitmap.create;

bitmap_out:=tbitmap.create;

end;

end.