Bonjour ,
Je veux savoir si un point est à l'interieur d'un rectangle ou pas .
J'ai les coordonnées des quatre sommets; je suis bloquée 8O 8O .
Version imprimable
Bonjour ,
Je veux savoir si un point est à l'interieur d'un rectangle ou pas .
J'ai les coordonnées des quatre sommets; je suis bloquée 8O 8O .
Bonjour,
Si le rectangle est droit tu fais un test logique.
S'il est incliné tu fais la somme des angles du point au sommet. zéro (ou 2 pi) le point est à l'intérieur
Code:
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
43
44
45
46
47
48
49
50
51
52
53
54
55 clear A=[10 10]; B=[10 30]; C=[40 30]; D=[40 10]; x=A(1); y=A(2); w=D(1)-A(1); h=C(2)-D(2); hh=rectangle('Position',[x y w h]); grid axis([-20 50 0 50]) O=[15 25]; P=[35 40]; hold on plot(O(1),O(2),'.r','MarkerSize',23) plot(P(1),P(2),'.b','MarkerSize',23) direction = [0 0 1]; %rotate(hh,direction,25) % cas du rectangle droit if O(1) > A(1) & O(1) < D(1) & O(2) >A(2) & O(2) < B(2) disp('O à l''Intérieur') else disp('O à l'' exxtérieur') end if P(1) > A(1) & P(1) < D(1) & P(2) >A(2) & P(2) < B(2) disp('P à l''Intérieur') else disp('P à l'' exxtérieur') end % Cas du rectangle incliné xv=[x x+w x+w x x];yv=[y y y+h y+h y]; %rotate angle alpha R(1,:)=xv;R(2,:)=yv; alpha=30*2*pi/360; XY=[cos(alpha) -sin(alpha);sin(alpha) cos(alpha)]*R; hold on;plot(XY(1,:),XY(2,:),'r'); OA=[A(1)-O(1) A(2)-O(2)]; OB=[B(1)-O(1) B(2)-O(2)]; OC=[C(1)-O(1) C(2)-O(2)]; OD=[D(1)-O(1) D(2)-O(2)]; OAOB=abs(dot(OA,OB)/(norm(OA)*norm(OB))) OBOC=abs(dot(OB,OC)/(norm(OB)*norm(OC))) OCOD=abs(dot(OC,OD)/(norm(OC)*norm(OD))) ODOA=abs(dot(OD,OA)/(norm(OD)*norm(OA))) point=real(acosd(OAOB+OBOC+OCOD+ODOA)) if point==0 disp('Point O à l''intérieur') end
Je vous remercie . :D:D