1 |
cnh |
1.1 |
function [excess]=excess_of_quad(V1,V2,V3,V4) |
2 |
|
|
% excess=excess_of_quad(V1,V2,V3,V4); |
3 |
|
|
% |
4 |
|
|
% where Vn are vectors |
5 |
|
|
|
6 |
|
|
plane1=plane_normal(V1,V2); |
7 |
|
|
plane2=plane_normal(V2,V3); |
8 |
|
|
plane3=plane_normal(V3,V4); |
9 |
|
|
plane4=plane_normal(V4,V1); |
10 |
|
|
|
11 |
|
|
angle12=pi-angle_between_vectors(plane2,plane1); |
12 |
|
|
angle23=pi-angle_between_vectors(plane3,plane2); |
13 |
|
|
angle34=pi-angle_between_vectors(plane4,plane3); |
14 |
|
|
angle41=pi-angle_between_vectors(plane1,plane4); |
15 |
|
|
|
16 |
|
|
excess=angle12+angle23+angle34+angle41-2*pi; |
17 |
|
|
|
18 |
|
|
%%% |
19 |
|
|
|
20 |
|
|
function [plane]=plane_normal(P1,P2); |
21 |
|
|
|
22 |
|
|
if ndims(P1)==4 |
23 |
|
|
plane(:,:,:,1)=P1(:,:,:,2).*P2(:,:,:,3)-P1(:,:,:,3).*P2(:,:,:,2); |
24 |
|
|
plane(:,:,:,2)=P1(:,:,:,3).*P2(:,:,:,1)-P1(:,:,:,1).*P2(:,:,:,3); |
25 |
|
|
plane(:,:,:,3)=P1(:,:,:,1).*P2(:,:,:,2)-P1(:,:,:,2).*P2(:,:,:,1); |
26 |
|
|
mag=sqrt(plane(:,:,:,1).^2 + plane(:,:,:,2).^2 + plane(:,:,:,3).^2); |
27 |
|
|
plane(:,:,:,1)=plane(:,:,:,1)./mag; |
28 |
|
|
plane(:,:,:,2)=plane(:,:,:,2)./mag; |
29 |
|
|
plane(:,:,:,3)=plane(:,:,:,3)./mag; |
30 |
|
|
elseif ndims(P1)==3 |
31 |
|
|
plane(:,:,1)=P1(:,:,2).*P2(:,:,3)-P1(:,:,3).*P2(:,:,2); |
32 |
|
|
plane(:,:,2)=P1(:,:,3).*P2(:,:,1)-P1(:,:,1).*P2(:,:,3); |
33 |
|
|
plane(:,:,3)=P1(:,:,1).*P2(:,:,2)-P1(:,:,2).*P2(:,:,1); |
34 |
|
|
mag=sqrt(plane(:,:,1).^2 + plane(:,:,2).^2 + plane(:,:,3).^2); |
35 |
|
|
plane(:,:,1)=plane(:,:,1)./mag; |
36 |
|
|
plane(:,:,2)=plane(:,:,2)./mag; |
37 |
|
|
plane(:,:,3)=plane(:,:,3)./mag; |
38 |
|
|
else |
39 |
|
|
error('Wrong ndims') |
40 |
|
|
end |
41 |
|
|
|