Math Help Forum

Math Help Forum Feed Site Feed

Go Back   Math Help Forum > Math Resources > Mathematics Software Discussion
Reply
 
Thread Tools Display Modes
  #16  
Old July 30th, 2008, 10:11 AM
CaptainBlack's Avatar
Grand Panjandrum
 
Join Date: Nov 2005
Location: South of England
Posts: 11,375
Country:
Thanks: 667
Thanked 3,618 Times in 2,915 Posts
CaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond reputeCaptainBlack has a reputation beyond repute
Default

Quote:
Originally Posted by hunter View Post
I have no errors when runnign my code, but it seems as if the code gives the correct values for the first two runs. I know this because I have compared outputs with the previous code I had with no "loop" in it. My code is below, please take a look and see if you can see where I need a change.

Thanks a lot.



%****************FIRST SCAN****************
L=128
f100='C:\MATLAB701\work\Points_CloudsL1';
for idx =1 : 10
if idx==1
%load the spreadsheet
flin='C:\Documents and Settings\prhill\My Documents\Hill\Point_Clouds\20_1_00.asc';
flout=[f100,num2str(101)];
else
flin=flout
flout=[f100,num2str(101+idx)];
end

points=load(flin);

See above in red, but that should not have stopped it working!

RonL
__________________
Truth does not change because it is, or is not, believed by a majority of the people.

Giordano Bruno
Reply With Quote
The following users thank CaptainBlack for this useful post:
Donate to MHF
Advertisement
 
  #17  
Old July 30th, 2008, 10:38 AM
Newbie
 
Join Date: Jul 2008
Posts: 11
Country:
Thanks: 6
Thanked 0 Times in 0 Posts
hunter is on a distinguished road
Default New observation may be helpful

I have noticed that the output files are being decreased any. They should be since I am deleting points. No points get deleted untill after the second scan which is why the "looped" version and my "old" version outputs numbers match up. Any input on how to fix this?? If needed i can send you my "old" none looped version to take a look at also. The current code full with the loop that I am running follows:

%****************FIRST SCAN****************
L=128
f1000=
'C:\MATLAB701\work\Points_CloudsL1';
for idx =1 : 10
if idx==1
%load the spreadsheet
flin='C:\Documents and Settings\prhill\My Documents\Hill\Point_Clouds\20_1_00.asc';
flout=[f1000,num2str(1001)];
else
flin=flout
flout=[f1000,num2str(1001+idx)];
end

points=load(flin);


x=points(:,1);
y=points(:,2);
z=points(:,3);
%find centroid
N=size(points,1);
X=sum(x)/N;
Y=sum(y)/N;
Z=sum(z)/N;
centroid=[X Y Z];
%form basis for matrix elements
h1=x-X; h2=y-Y; h3=z-Z;

%form the elements
k11=sum(h1.*h1); k12=sum(h1.*h2); k13=sum(h1.*h3);
k21=sum(h1.*h2); k22=sum(h2.*h2); k23=sum(h2.*h3);
k31=sum(h1.*h3); k32=sum(h2.*h3); k33=sum(h3.*h3);

%form the matrix
M=[k11 k12 k13; k21 k22 k23; k31 k32 k33];

%find the direction vector and value
[vec,val]=eig(M);

%the first column of vec is the unit normal vector and corresponds to the
%minimum eigen value
un_vec=vec(:,1);
A=un_vec(1)
B=un_vec(2)
C=un_vec(3)

%calculate D using un_vec and centroid
D=-A.*centroid(1)-B.*centroid(2)-C.*centroid(3);

%formula for plane is A*x+B*y+C*z+D=0
%find the z's for the 4 corners of the plane
x_hi=max(x); x_lo=min(x);
y_hi=max(y); y_lo=min(y);
%z=(-D-A*x-B*y)/C
zc1=(-D-A*x_hi-B*y_hi)/C;
zc2=(-D-A*x_hi-B*y_lo)/C;
zc3=(-D-A*x_lo-B*y_lo)/C;
zc4=(-D-A*x_lo-B*y_hi)/C;

%the corner points are
cnr1=[x_hi y_hi zc1];
cnr2=[x_hi y_lo zc2];
cnr3=[x_lo y_lo zc3];
cnr4=[x_lo y_hi zc4];
p_cnrs=[cnr1; cnr2; cnr3; cnr4; cnr1];

%distance from points to plane
%use formula (Ax+By+Cz+D)/sqrt(A^2+B^2+C^2)
%the denominator = 1, just evaluate the numerator
plane2point=[x y z ones(size(x,1),1)]*[A B C D]';
m=1;
for n=1 : size(plane2point,1);
if abs(plane2point(n))<L
cull1(m,=[x(n) y(n) z(n)];
m=m+1;


end

L=L/2

end



%Save Point Cloud to File
fid_out=fopen(flout,'w');
fprintf(fid_out,
'%6.3f %6.3f %6.3f\n',cull1');
fclose(fid_out)

%Save A B C values from final plane equation
fid=fopen('C:\MATLAB701\work\Vector_ABC_Values_Plane1L','w');
fprintf(fid,
'%3.100f %3.100f %3.100f',[A B C]');
fclose(fid)

end

%plot some points
plot3(cull1(:,1),cull1(:,2),cull1(:,3),'.b','MarkerSize',15);
hold
on
plot3(p_cnrs(:,1), p_cnrs(:,2), p_cnrs(:,3),'m');
plot3(X,Y,Z,
'.g','MarkerSize',15);

%****************SECOND SCAN****************
LI=128
f1000=
'C:\MATLAB701\work\Points_CloudsL2';
for idxI =1 : 10
if idxI==1
%load the spreadsheet
flinI='C:\Documents and Settings\prhill\My Documents\Hill\Point_Clouds\20_1_00.asc';
floutI=[f1000,num2str(1001)];
else
flinI=floutI
floutI=[f1000,num2str(1001+idx)];
end

pointsI=load(flinI);

xI=pointsI(:,1);
yI=pointsI(:,2);
zI=pointsI(:,3);
%find centroid
NI=size(pointsI,1);
XI=sum(xI)/NI;
YI=sum(yI)/NI;
ZI=sum(zI)/NI;
centroidI=[XI YI ZI];
%form basis for matrix elements
h1I=xI-XI; h2I=yI-YI; h3I=zI-ZI;

%form the elements
k11I=sum(h1I.*h1I); k12I=sum(h1I.*h2I); k13I=sum(h1I.*h3I);
k21I=sum(h1I.*h2I); k22I=sum(h2I.*h2I); k23I=sum(h2I.*h3I);
k31I=sum(h1I.*h3I); k32I=sum(h2I.*h3I); k33I=sum(h3I.*h3I);

%form the matrix
MI=[k11I k12I k13I; k21I k22I k23I; k31I k32I k33I];

%find the direction vector and value
[vecI,valI]=eig(MI);

%the first column of vec is the unit normal vector and corresponds to the
%minimum eigen value
un_vecI=vecI(:,1);
AI=un_vecI(1)
BI=un_vecI(2)
CI=un_vecI(3)

%calculate D using un_vec and centroid
DI=-AI.*centroidI(1)-BI.*centroidI(2)-CI.*centroidI(3);

%formula for plane is A*x+B*y+C*z+D=0
%find the z's for the 4 corners of the plane
x_hiI=max(xI); x_loI=min(xI);
y_hiI=max(yI); y_loI=min(yI);
%z=(-D-A*x-B*y)/C
zc1I=(-DI-AI*x_hiI-BI*y_hiI)/CI;
zc2I=(-DI-AI*x_hiI-BI*y_loI)/CI;
zc3I=(-DI-AI*x_loI-BI*y_loI)/CI;
zc4I=(-DI-AI*x_loI-BI*y_hiI)/CI;

%the corner points are
cnr1I=[x_hiI y_hiI zc1I];
cnr2I=[x_hiI y_loI zc2I];
cnr3I=[x_loI y_loI zc3I];
cnr4I=[x_loI y_hiI zc4I];
p_cnrsI=[cnr1I; cnr2I; cnr3I; cnr4I; cnr1I];

%distance from points to plane
%use formula (Ax+By+Cz+D)/sqrt(A^2+B^2+C^2)
%the denominator = 1, just evaluate the numerator
plane2pointI=[xI yI zI ones(size(xI,1),1)]*[AI BI CI DI]';
mI=1;
for nI=1 : size(plane2pointI,1);
if abs(plane2pointI(nI))<LI
cull1I(mI,=[xI(nI) yI(nI) zI(nI)];
mI=mI+1;


end

LI=LI/2

end


%Save Point Cloud to File
fid_outI=fopen(floutI,'w');
fprintf(fid_outI,
'%6.3f %6.3f %6.3f\n',cull1I');
fclose(fid_outI)

%Save A B C values from final plane equation
fidI=fopen('C:\MATLAB701\work\Vector_ABC_Values_Plane2L','w');
fprintf(fidI,
'%3.100f %3.100f %3.100f',[AI BI CI]');
fclose(fidI)

end

%plot some points
plot3(cull1I(:,1),cull1I(:,2),cull1I(:,3),'.r','MarkerSize',15);
hold
on
plot3(p_cnrsI(:,1), p_cnrsI(:,2), p_cnrsI(:,3),'m');
plot3(XI,YI,ZI,
'.g','MarkerSize',15);

%**********Solving for angle between two planes***********

%Load A,B,C Values for both Planes
val_1=load('C:\MATLAB701\work\Vector_ABC_Values_Plane1L');
A1=val_1(:,1);
B1=val_1(:,2);
C1=val_1(:,3);

val_2=load(
'C:\MATLAB701\work\Vector_ABC_Values_Plane2L');
A2=val_2(:,1);
B2=val_2(:,2);
C2=val_2(:,3);

%Determine Magnitude of Vectors
magV1=sqrt(A1^2+B1^2+C1^2);
magV2=sqrt(A2^2+B2^2+C2^2);

M=magV1*magV2;

%Create Vectors
V1=[A1 B1 C1];
V2=[A2 B2 C2];

%Solve for angle Theta
Theta=acos((V1*V2')/M)*(180/pi)

Last edited by hunter; July 30th, 2008 at 11:07 AM.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off
Forum Jump


All times are GMT -7. The time now is 09:26 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.
©2005 - 2009 Math Help Forum


Math Help Forum is a community of maths forums with an emphasis on maths help in all levels of mathematics.
Register to post your math questions or just hang out and try some of our math games or visit the arcade.