% Définition interactive des paramètres pour la représentation
% du tournesol. 

% Nécessite: TOURNESOL.M, AIDEFUN.M (version modifiée de HELPFUN.M)
% et TOURNESOL.MAT (image du tournesol).

% Couples de nombres de Fibonacci
fs=[21 34;34 55;55 89;89 144];

% Fenêtre graphique pour la représentation
tour=figure(...
	'Name','Tournesol',...
	'Numbertitle','off',...
	'Visible','off');
	
% Fenêtre pour l'affichage des paramètres et le lancement de la
% simulation
fig=figure(...
	'Name','Paramètres',...
	'NumberTitle','off',...
	'Position',[45 80 340 267],...
	'Resize','off',...
	'Visible','off');

% Nombre de points->Nb
uicontrol(fig,...
	'Style','text',...
	'Position',[20 220 110 20],...
	'String','Nombre de points :');
BtnNb=uicontrol(fig,...
	'Style','edit',...
	'String','200',...
	'Position',[140 220 60 20]);
	
% Taille des points -> tp
uicontrol(fig,...
	'Style','text',...
	'Position',[20 180 110 20],...
	'String','Taille des points :');
BtnTp=uicontrol(fig,...
	'Style','edit',...
	'String','12',...
	'Position',[140 180 60 20]);
	
% Avec ou sans numérotation ->val
avec=uicontrol(fig,...
	'Style','checkbox',...
	'String','Numérotation',...
	'Position',[20 140 110 20]);

% Avec ou sans spirale 
avecsp=uicontrol(fig,...
	'Style','checkbox',...
	'String','Spirales',...
	'Position',[20 100 110 20],...
	'Callback',['if get(avecsp,''value'')==1,',...
	              'set(nbfib,''Visible'',''on'');',...
	              'set(popf,''Visible'',''on'');',...
				'else,',...
				  'set(nbfib,''Visible'',''off'');',...
	              'set(popf,''Visible'',''off''); end']);
		
% Popup menu pour le choix des couples de nombres de Fibonacci
nbfib=uicontrol(fig,...
	'Style','text',...
	'String','Choisissez deux nombres de Fibonacci',...
	'Visible','off',...
	'Position',[20 40 180 35]);
popf=uicontrol(fig,...
	'Style','popup',...
	'String','(21,34)|(34,55)|(55,89)|(89,144)',...
	'Visible','off',...
	'Position',[19 20 183 20]);
	
% Boutons de contrôle: Fin, OK et Aide
uicontrol(fig,...
	'Style','push',...
	'Position',[260 20 60 20],...
	'String','Fin',...
	'CallBack',['load(''tournesol'');',...
	            'figure(tour);',...
				'clg;',...
	            'colormap(MAP);',...
				'image(X);',...
				'axis off;axis equal;',...
				'close(fig)']);
				
titreChaine='De la croissance des plantes';
aideChaine=...
        [' Un capitule de tournesol, comme celui d''une pâquerette '
		 ' et de beaucoup d''autres composées, présente deux fa-   '
		 ' milles de spirales qui s''interpénètrent, les sens d''en-'
		 ' roulement étant opposés. Des modélisations montrent que'
		 ' cette configuration régulière résulte de la dynamique  '
		 ' d''une optimisation de la croissance végétale.          '
		 ' L''arrangement des primordia (zone claire entourée d''une'
		 ' paroi foncée) est obtenu en séparant des points par    '
		 ' l''angle d''or sur une spirale. Le nombre de parastiques '
		 ' (ou spirales) en résultant dépend du temps qui s''écoule'
		 ' entre l''apparition de deux primordia successifs.       '
		 ' Utilisation: choisissez le nombre de points à représen-'
		 ' ter, indiquez si ceux-ci doivent être numérotés ou non '
		 ' demandez un affichage ou non des spirales et choisissez'
		 ' un couple de nombres de Fibonacci. Les valeurs données '
		 ' correspondent aux tournesols. On peut trouver de tels  '
		 ' arrangements sur les ananas, les pives, les pâque-     '
		 ' rettes, etc.                                           '
		 '                                                        '
		 ' Source: Ian Stewart, Pour la Science, No 208 fév. 1995 '
		 ' Physique et botanique, Michel Saint Jean, Pour la      '
		 ' Science, No 172, mai 1992, L''algèbre linéaire à partir '
		 ' d''applications, A. Robert, séminaire de formation con- '
		 ' tinue, Genève 1996.                                    '];
uicontrol(fig,...
	'Style','push',...
	'Position',[260 220 60 20],...
	'String','Aide',...
	'CallBack','aidefun(titreChaine,aideChaine)');
uicontrol(fig,...
	'Style','push',...
	'Position',[260 60 60 20],...
	'String','OK',...
	'CallBack',['nb=str2num(get(BtnNb,''String''));',...
		'tp=str2num(get(BtnTp,''String''));',...
		'if get(avecsp,''Value''),f=fs(get(popf,''Value''),:);else f=[];end,',...
		'val=get(avec,''Value'');',...
		'figure(tour); set(tour,''Visible'',''on'');',...
		'tournesol(nb,tp,val,f)']);
set(fig,'Visible','on');
