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 :
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
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
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.
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
Si quelqu'un sait comment faire, je suis preneur.![]()
Partager