forno a legna

Messaggioda diego » 29/11/2003, 08:18

Ciao a tutti,
ho un piccolo problema di ottimizzazione: qui a casa mia abbiamo costruito un forno a legna interamente in mattoni di forma semisferica con diametro di 100 cm. E' sorta una discussione sul numero massimo di teglie di forma circolare (per semplicità ) che potessero esservi inserite...

Ho scritto un file matlab che ricevuti in ingresso il diametro del forno e quello della teglia calcola e dispone graficamente il numero massimo di tali teglie. La soluzione più ovvia è stata quella di disporle in corone circolari, a partire dalla circonforenza interna del forno, via via più piccole a passi di due volte il diametro della teglia inserita. Non sono in grado di dimostrare che questo sia l'ottimo.

Mando in allegato il sorgente matlab, provate anche con diametri di teglie che arrivino a 1/8 o anche 1/10 di quello del forno.

Grazie e ancora ciao a tutti

ecco il sorgente:

% FORNO
% questo programma disegna le teglie di raggio definibile dall'utente %che possono essere
% introdotte in un forno circolare di raggio definibile dall'utente e % calcola anche il num tot di teglie

clear all
close all

s3 = sprintf('\n\nIl mio forno ha diametro 100 cm e apertura 40 cm\n')
D = input('Introduci il diametro del forno in cm : ');
d = input('Introduci il diametro della teglia in cm : ');

centro = 0;

if D>d & D>0 & d>0

tot_teglie = 0;

%%%%%CIRCONFERENZA FORNO

t = linspace(0,D,1000);

yc11 = ((D/2).^2 -(t-D/2).^2).^(1/2) + D/2;
yc12 = -((D/2).^2 -(t-D/2).^2).^(1/2) + D/2;


figure
plot(t,yc11,'b')
hold on
plot(t,yc12,'b')

axis('square') % stessa unità di misura su entrambi gli assi
title('Disposizione delle teglie nel forno')
xlabel('dimensioni in cm ')
ylabel('dimensioni in cm')

grid on, zoom on

%TEGLIE attaccate alla parete del forno %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
centro = 0;
n = (D - rem(D,d))/d;
for D2 = D : -2*d : d

ntc = pi/(asin(d/(D2-d)));
ntc = ntc-rem(ntc,1);

if ntc > 1 % se ci sta solo una teglia la metto in centro

tot_teglie = tot_teglie + ntc;

for a = 0 : 2*pi/ntc: 2*pi*(1-(1/ntc))
x1 = cos(a)*(D2-d)/2 + D/2;
y1 = sin(a)*(D2-d)/2 + D/2;

s = linspace(x1 - d/2, x1 + d/2, 1000);

yc1 = ((d/2).^2 -(s-x1).^2).^(1/2) + y1 ;
yc2 = -((d/2).^2-(s-x1).^2).^(1/2)+ y1 ;


hold on
plot(s,yc1,'r')
hold on
plot(s,yc2,'r')

end

else
centro=1;
end

end

% teglia al centro

if (D2+2*d) >= d & (D2+2*d) < 2*d % sta una teglia al centro
centro=1;
end

if centro == 1
s = linspace(-d/2+D/2,d/2+D/2,1000);
yc1 = ((d/2).^2 -(s-D/2).^2).^(1/2)+ D/2;
yc2 = -((d/2).^2 -(s-D/2).^2).^(1/2)+ D/2;
hold on
plot(s,yc1,'r')
hold on
plot(s,yc2,'r')
tot_teglie = tot_teglie+1;
end

s3 = sprintf('\n\nIl numero di teglie diponibili nel forno è ')
tot_teglie

else
s3 = sprintf('Pazzo !! Il diametro del forno non può essere <= di quello della teglia o uno dei due negativo o entrambi')
end
diego
Starting Member
Starting Member
 
Messaggio: 2 di 3
Iscritto il: 29/11/2003, 08:11
Località: Italy

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite