COMPARATORE CENTESIMALE – LINGUAGGIO SVG
MISURE DI PRECISIONE – COMPARATORE
Il comparatore non è utilizzato normalmente per eseguire misure di lunghezze assolute ma per apprezzare le variazioni rispetto ad una quota iniziale. La misura deve intendersi come relativa al primo posizionamento del comparatore (vedi la prima figura). Anche questo set di verifiche è stato preparato con l’obiettivo di poter assegnare ad ogni alunno una verifica unica. Per scaricare un set di verifiche fate click sul link seguente:Download gratuito di 35 verifiche
Il file compresso contiene 35 prove in pdf. E’ presente anche un file pdf contenente tutti i risultati (per le misure di tipo relativo).
Ogni aggiornamento del codice e le nuove versioni delle verifiche, sono postate sulla pagina facebook: www.facebook.com/idroslab
DISEGNO DELLA VERIFICA IN LINGUAGGIO SVG
Il codice scritto per realizzare queste esercitazioni parte sempre dall’idea di generare un numero casuale (in questo caso compreso tra -5.00 e 5.00 mm) e di conseguenza disegnare lo strumento con le lancette posizionate esattamente sulla misura estratta dalla funzione random
% Autori
% Prof. Danilo Pasquini ITIS S. Cannizzaro, Colleferro (Roma)
% Prof. Paolo Sordi IPSIA A. Pacinotti, Pontedera (Pisa)
% Disegno del comparatore centesimale
%
function comparatore ()
global larghezza_linea
global altezza_tacche_asta
global altezza_tacche_asta_lunghe
global altezza_tacche_nonio
global larghezza_nonio
global raggio_millimetrato
global raggio_spigolo_nonio
global larghezza_prima_dello_zero
global fid1
global scala
global numero_verifica
global colonne_risultati
global righe_risultati
global matrice_risultati
numero_verifica = numero_verifica + 1;
scala = 3.54;
clc
testo = num2str(ceil(numero_verifica))
colonne_risultati = 1;
matrice_risultati (righe_risultati, colonne_risultati) = str2num(testo);
nomefile = ['c:\comparatore_100\100_comparatore_' testo '.svg'];
nomefile1 = ['c:\comparatore_100\100_comparatore_' testo '.txt'];
fid = fopen([nomefile], 'wt');
fid1 = fopen([nomefile1], 'wt');
fprintf(fid, ['<!--?xml version="1.0" encoding="iso-8859-1" standalone="no"?--> \n']);
fprintf(fid, ['\n']);
fprintf(fid, ['\n']);
portata_strumento = 1000
[fid] = scrivere (fid,15,10,'left',3,'Nome: __________________________ Classe: ___________ Data: _____________');
%[fid] = scrivere (fid,15,20,'left','20','Per verifcare la misura sottrarre il numero per 5,678');
[fid] = scrivere (fid,15,17,'left',2,['Soluzione: ' testo]);
[fid] = scrivere (fid,10,283,'right',2.5,'www.tiny.cc/disegno');
[fid] = scrivere (fid,124,282,'right',2,'Autori: Prof. Paolo Sordi ITIS Marconi, Pontedera (Pisa)');
[fid] = scrivere (fid,132,285,'right',2,'Prof. Danilo Pasquini IPSIA P.P. Delfino, Colleferro (Roma)');
% a destra del nonio
misura_casuale = 0
for i=1:3
for j=[40, 105, 210-40]
colonne_risultati = 1 + colonne_risultati;
matrice_risultati (righe_risultati, colonne_risultati) = misura_casuale;
disegna_comparatore (fid, j, -38+88*i, misura_casuale);
misura_casuale = -5 + (ceil (rand*portata_strumento)) / 100;
end
end
fprintf(fid, [' \n']);
fclose(fid)
stringa_dos = ['c:\Programmi\Inkscape\inkscape -f ' nomefile ' -A ' 'C:\comparatore_100\100_comparatore_' testo '.pdf']
dos(stringa_dos)
fclose (fid1)
load chirp;
y1 = y; Fs1 = Fs;
% The chirp signal finishes before the
wavplay(y,Fs)
% -------------------------------------------------------------------------
function disegna_comparatore (fid,pos_x,pos_y,misura)
global altezza_tacche_asta
global altezza_tacche_asta_lunghe
global altezza_tacche_nonio
global larghezza_nonio
global fid1
larghezza_linea = 1;
raggio_strumento = 28;
colore1 = 0;
colore2 = 0;
colore3 = 0;
tric = 1.4;
linea (fid,pos_x+raggio_strumento*0.15,pos_y+raggio_strumento,pos_x + raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
linea (fid,pos_x-raggio_strumento*0.15,pos_y+raggio_strumento,pos_x - raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
linea (fid,pos_x+raggio_strumento*0.15,pos_y+raggio_strumento* tric,pos_x - raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
% d1 spessore tastatore
d1 = 0.07;
linea (fid,pos_x+raggio_strumento*d1,pos_y+raggio_strumento*tric,pos_x + raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
linea (fid,pos_x-raggio_strumento*d1,pos_y+raggio_strumento*tric,pos_x - raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
linea (fid,pos_x+raggio_strumento*d1,pos_y+raggio_strumento*tric + misura*(-1) +5,pos_x - raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
% linea di riferimento
linea (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric + 5,pos_x - raggio_strumento*d1*4, pos_y + raggio_strumento * tric + 5, colore1, colore2, colore3,larghezza_linea/2)
[fid] = scrivere (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric ,'left',3,'+ ');
[fid] = scrivere (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric + 8 ,'left',3,'- ');
[fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.15 ,'left',3,'misura: ');
[fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.40 ,'left',3,'_______');
%[fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.60 ,'left','25',num2str(misura+5.678));
[fid] = cerchio (fid,pos_x,pos_y,raggio_strumento*1.02,colore1,colore2,colore3)
[fid] = cerchio (fid,pos_x,pos_y,raggio_strumento*0.99,colore1,colore2,colore3)
%fid = linea (fid,pos_x,pos_y,pos_x+lunghezza,pos_y,180,180,180,larghezza_linea);
for i=1:100
x1 = pos_x + raggio_strumento*0.97 * cos(2 * pi * i/100 );
y1 = pos_y + raggio_strumento*0.97 * sin(2 * pi * i/100 );
x2 = pos_x + raggio_strumento*0.93 * cos(2 * pi * i/100);
y2 = pos_y + raggio_strumento*0.93 * sin(2 * pi * i/100);
if rem(i,5) == 0
x2 = pos_x + raggio_strumento*0.88 * cos(2 * pi * i/100);
y2 = pos_y + raggio_strumento*0.88 * sin(2 * pi * i/100);
end
[fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
if rem(i,10) == 0
x1 = pos_x + raggio_strumento*0.80 * cos(2 * pi * i/100 - pi/2);
y1 = pos_y + raggio_strumento*0.80 * sin(2 * pi * i/100 - pi/2);
if i < 100
[fid] = scrivere (fid,x1,y1,'middle',2.2,num2str(i));
else
[fid] = scrivere (fid,x1,y1,'middle',2.2,num2str(0));
end
end
if rem(i,10) == 0
x1 = pos_x + raggio_strumento*0.70 * cos(2 * pi * i/100 - pi/2);
y1 = pos_y + raggio_strumento*0.70 * sin(2 * pi * i/100 - pi/2);
if i < 100
[fid] = scrivere (fid,x1,y1,'middle',1.4,num2str(100-i));
end
end
% fid = linea (fid,pos_x+i,pos_y,pos_x+i,pos_y+tacca, 0, 0, 0,0.1);
end
centesimi = misura-floor(misura);
x1 = pos_x + raggio_strumento*0.97 * cos(2 * pi * centesimi - pi/2);
y1 = pos_y + raggio_strumento*0.97 * sin(2 * pi * centesimi - pi/2);
x2 = pos_x ;
y2 = pos_y ;
[fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
% quadrante millimetri
if (sin(2 * pi * centesimi - pi/2) < -0.8)
pos_x1 = pos_x - raggio_strumento / 2.3;
pos_y1 = pos_y ;
else
pos_x1 = pos_x;
pos_y1 = pos_y - raggio_strumento / 2.2;
end
raggio_quadrante_piccolo = raggio_strumento / 4;
[fid] = cerchio (fid,pos_x1,pos_y1,raggio_quadrante_piccolo,colore1,colore2,colore3)
for i=0:9
x1 = pos_x1 + raggio_quadrante_piccolo*0.97 * cos(2 * pi * i/10- pi/2);
y1 = pos_y1 + raggio_quadrante_piccolo*0.97 * sin(2 * pi * i/10- pi/2);
x2 = pos_x1 + raggio_quadrante_piccolo*0.85 * cos(2 * pi * i/10- pi/2);
y2 = pos_y1 + raggio_quadrante_piccolo*0.85 * sin(2 * pi * i/10- pi/2);
[fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
x1 = pos_x1 + raggio_quadrante_piccolo*0.78 * cos(2 * pi * i/10 - pi/2);
y1 = pos_y1 + raggio_quadrante_piccolo*0.78 * sin(2 * pi * i/10 - pi/2);
tic = sin(2 * pi * i/10 - pi/2);
if tic < 0 y1=y1-tic*1.5; end altezza_numeretto = 1.6; if i > 0
[fid] = scrivere (fid,x1,y1-altezza_numeretto/2,'middle',altezza_numeretto,num2str(10-i));
else
[fid] = scrivere (fid,x1,y1-altezza_numeretto/2,'middle',altezza_numeretto,num2str(0));
end
% fid = linea (fid,pos_x+i,pos_y,pos_x+i,pos_y+tacca, 0, 0, 0,0.1);
end
interi = floor(misura);
x1 = pos_x1 + raggio_quadrante_piccolo*0.97 * cos(2 * pi * (5+(-1)*misura)/10 - pi/2);
y1 = pos_y1 + raggio_quadrante_piccolo*0.97 * sin(2 * pi * (5+(-1)*misura)/10 - pi/2);
x2 = pos_x1 ;
y2 = pos_y1 ;
[fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
% [fid] = scrivere (fid,pos_x - raggio_strumento + 40 , pos_y + raggio_strumento * 1.29 ,'left','20',num2str(centesimi));
% fid = rettangolo (fid, pos_x+lunghezza, pos_y-raggio_spigolo_nonio, ...
% larghezza_nonio, raggio_spigolo_nonio*2, 0, 0, 0,0.2);
fid = commento (fid,'tacche nonio')
% parte sotto del nonio
%[fid] = scrivere (fid,pos_x+lunghezza+tacca_nonio + 4+30,pos_y,'middle','7',num2str(lunghezza));
fprintf(fid1, ['misura: ' num2str(misura, '%10.2f') '\n'])
% -------------------------------------------------------------------------
function [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);
% -------------------------------------------------------------------------
function [fid] = linea_puntini (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);
% -------------------------------------------------------------------------
function [fid] = cerchio (fid,coord_x,coord_y,raggio,colore1,colore2,colore3)
global scala
fprintf(fid, [' \n']);
% --------------------------------------------------------------------------
function [fid] = rettangolo (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);
% --------------------------------------------------------------------------
function [fid] = commento (fid,testo_commento)
global scala
fprintf(fid, ['/* ' '\n']);
fprintf(fid, [testo_commento '\n']);
fprintf(fid, ['*/ ' '\n']);
% --------------------------------------------------------------------------
function [fid] = scrivere (fid,x1,y1,giustificazione,altezza_testo,testo)
global scala
fprintf(fid, ['' testo '' '\n']);
% Autori
% Prof. Paolo Sordi IPSIA A. Pacinotti, Pontedera (Pisa)
% Prof. Danilo Pasquini IPSIA Parodi Delfino, Colleferro (Roma)
%
function stampa_pdf_risultati ()
global larghezza_linea
global altezza_tacche_asta
global altezza_tacche_asta_lunghe
global altezza_tacche_nonio
global larghezza_nonio
global raggio_millimetrato
global raggio_spigolo_nonio
global larghezza_prima_dello_zero
global fid1
global scala
global numero_lettura
global matrice_risultati
global colonne_risultati
global righe_risultati
numero_lettura = 0;
larghezza_prima_dello_zero = 3;
larghezza_linea = 0.2;
altezza_tacche_asta = 2;
altezza_tacche_asta_lunghe = 5;
altezza_tacche_nonio = 3;
larghezza_nonio = 15;
raggio_millimetrato = 11;
raggio_spigolo_nonio = 14.5;
scala = 3.54;
altezza_testo = 1.6;
testo = num2str(ceil(rand*100));
nomefile = ['c:\comparatore_100\risultati_' testo '.svg'];
nomefile1 = ['c:\comparatore_100\risultati_' testo '.txt'];
fid = fopen([nomefile], 'wt');
fid1 = fopen([nomefile1], 'wt');
fprintf(fid, ['<!--?xml version="1.0" encoding="iso-8859-1" standalone="no"?--> \n']);
fprintf(fid, ['\n']);
fprintf(fid, ['\n']);
portata_strumento = 2500;
lunghezza_casuale = (ceil (rand*portata_strumento))/ 100;
pos_x = 90;
pos_y = 40;
[fid] = scrivere (fid,30,10,'left',3,'Risultati letture comparatore');
[fid] = scrivere (fid,145,10,'right',3,'www.tiny.cc/disegno');
[righe,colonne] = size(matrice_risultati);
passo = 10;
for i=1:righe
for j=1:colonne
if j==1
[fid] = scrivere (fid,4 + j*passo*1.3, 10 + i*passo*0.78, 'middle', 3.5, num2str(matrice_risultati(i,j)));
else
[fid] = scrivere (fid,7 + j*passo*1.7, 10 + i*passo*0.78, 'middle', 3, num2str(matrice_risultati(i,j), '%10.2f'));
end
end
end
fprintf(fid, [' \n']);
fclose(fid)
stringa_dos = ['c:\Programmi\Inkscape\inkscape -f ' nomefile ' -A ' 'C:\comparatore_100\Risultati' testo '.pdf']
dos(stringa_dos)
fclose (fid1)
% -------------------------------------------------------------------------
function [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);
% -------------------------------------------------------------------------
function [fid] = cerchio (fid,x1,y1,raggio,colore1,colore2,colore3)
global scala
fprintf(fid, [' \n']);
% --------------------------------------------------------------------------
function [fid] = rettangolo (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);
% --------------------------------------------------------------------------
function [fid] = commento (fid,testo_commento)
fprintf(fid, ['/* ' '\n']);
fprintf(fid, [testo_commento '\n']);
fprintf(fid, ['*/ ' '\n']);
% --------------------------------------------------------------------------
function [fid] = scrivere (fid,x1,y1,giustificazione,altezza_testo,testo)
global scala
altezza_testo = altezza_testo*0.8;
fprintf(fid, ['' testo '' '\n']);
%rettangolo_per_coprire_numero (fid, x1, y1, altezza_testo , altezza_testo, 0, 0, 0, 0.2)
% --------------------------------------------------------------------------
function [fid] = rettangolo_per_coprire_numero (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
global scala
fprintf(fid, [' \n']);