Bonjour,

Je travaille actuellement sur un petit projet sur matlab, qui consiste un modéliser en 2D un carré avec des cercles à l'intérieur (éponge 2D). Cependant, il y plusieurs condition à respecter.

Conditions :
- Les cercles ne doivent pas sortir du carré
- Les cercles ne se superposent pas (ne se croissent pas)
- Les cercles sont de rayon variable (compris entre 30 et 100 micromètre)
- La longueur du carré : L = 10*Rayon(max), c'est-à-dire L = 10^(-5) mètre

J'ai commencer par écrire un code pour des cercles à rayon fixe de 35 micromètre. Puis j'ai inséré dans le carré 10 cercles.

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
clc; clear all; home;close all;
%Projet
 
N = 10; % Nbr de cercle
d = 70e-6;
R = d/2; % Rayon du cercle : 35 micromètre
L = 10*R;
Aire_bille = pi*R^2;
 
 
cb = zeros(N,2);
Norme = zeros(N,N);
Norme(:,:) = 3*R;
Norme(1,2) = 0;
while(min(Norme(:))<=d)   
    for i = 1:N
        cb(i,1) = R + rand(1)*(L-d);
        cb(i,2) = R + rand(1)*(L-d);
    end
    for p = 1:N
        for q = p+1:N
             Norme(p,q) = sqrt((cb(p,1)-cb(q,1))^2+(cb(p,2)-cb(q,2))^2);    
        end
    end
end
 
for i = 1:N
    plot(cb(:,1),cb(:,2),'+r')
 
    VThetaDeg = 0:1:360;
    VTheta = VThetaDeg *pi / 180;
    XCercle = cb(i,1) + R * cos(VTheta);
    YCercle = cb(i,2) + R * sin(VTheta);
    plot(XCercle, YCercle)
    hold on
 
    xlim([0,L]);
    ylim([0,L]);
    title('Position des billes');
    grid on;
end
J'aimerais pouvoir faire la même chose mais pour des cercle de rayon variable :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 
 for i = 1:N
        R = R_min + rand(1)*(R_max-R_min);
        R1(i) = R;
        cb(i,1) = R1(i) + rand(1)*(L-(2*R1(i)));
        cb(i,2) = R1(i) + rand(1)*(L-(2*R1(i)));
end
Le problème ici, c'est que je ne sais pas comment faire pour que les cercles ne se croissent pas dans les cas ou le rayon est variable.

Si quelqu'un sait comment faire, je suis preneur.