求教:如何提取三维坐标!
我要提取 z=x.^2+y.^2 ;=meshgrid(-2:0.1:2,-3:0.1:3);mesh(x,y,z);的三维坐标!而且要将做坐标排成三列,每一行就是一个点的坐标。求教,望高人指点。急急!!! 回复 1 # sunminmin 的帖子
我用xyz=' 得不到将坐标排成三列的结果。还有就是如果xyz=.....得到将坐标排成三列保存进txt文件中,如何在matlab中读取这个txt文件显示和z=x.^2+y.^2一样的图形。望指点,我刚学matlab,谢谢 回复 2 # sunminmin 的帖子
希望路过的也指点指点,不胜感激。帮我顶一下,谢谢。 本帖最后由 meiyongyuandeze 于 2011-5-5 00:04 编辑
直接画图及可以,不明白为什么要写成那种形式呢?如果真的需要,应该实现起来不难!
回复 3 # sunminmin 的帖子
clc
clear
=meshgrid(-2:1:2,-3:1:3);
z=x.^2+y.^2;
mesh(x,y,z);
=size(x);
xyz=结果:xyz =
-2 -3 13
-2 -2 8
-2 -1 5
-2 0 4
-2 1 5
-2 2 8
-2 3 13
-1 -3 10
-1 -2 5
-1 -1 2
-1 0 1
-1 1 2
-1 2 5
-1 3 10
0 -3 9
0 -2 4
0 -1 1
0 0 0
0 1 1
0 2 4
0 3 9
1 -3 10
1 -2 5
1 -1 2
1 0 1
1 1 2
1 2 5
1 3 10
2 -3 13
2 -2 8
2 -1 5
2 0 4
2 1 5
2 2 8
2 3 13应该没问题! 回复 5 # meiyongyuandeze 的帖子
谢谢!是正确的。我用matlab做随机地形图的生成,想把其中一幅地形图map1的坐标保存进txt文件中,然后利用vc++与matlab混合编程,利用matlab引擎,读取txt文件生成地形图map1。把x,y,z排成三列(即每一行为一个点的坐标)存进txt中,方便在vc++中读取。 回复 6 # sunminmin 的帖子
生成固定的地形图map1,下一步在map1中绘制轨迹图,我想用vc++和matlab混合编程通过matlab引擎做一个简单的轨迹规划。 回复 7 # sunminmin 的帖子
祝好运,呵呵! 如何获取下面3个m文件生成的三维地形图的坐标(x,y,z)信息??
生成三维随机地形图的代码,用matlab实现:
CeatHill.m文件function =CeatHill(N,h,x0,y0,xi,yi,num)
%创建小山丘模型,N座山,H为山的高度,X0,Y0为山的坐标。XI,YI为山丘的斜度,NUM为山丘模型数据的维数。
%XI,YI的值越大,山丘就越平坦
% Example:
% tic;
% h=;
% x0=;
% y0=;
% xi=[];
% yi=[];
% d=CeatHill(3,h,x0,y0,xi,yi,65);
% colormap(gray); %设置渲染的颜色
% surf(d); %画出三维曲面
% shading flat; %各小曲面之间不要网格
% toc %测试运行时间
x=1:1:num;y=1:1:num;
%z2=zeros(1,4);
for m=1:num
for n=1:num
Sum=0;
for k=1:N
s=h(k)*exp(-((x(m)-x0(k))/xi(k))^2-((y(n)-y0(k))/yi(k))^2);
Sum=Sum+s;
end
data(m,n)=Sum;
end
endSquareDiamond.m文件function =SquareDiamond(N,initvalue,c)
%输入N为:方阵的维数2^N+1,在方阵的四个角的顶点上放置的初值,
%这里定为四个初值一样
% Example:
% tic;
% d=SquareDiamond(8,5,0.5);
% colormap(gray); %设置渲染的颜色
% surf(d); %画出三维曲面
% shading flat; %各小曲面之间不要网格
% toc %测试运行时间
n=2^N;
data=zeros(n+1);
data(1,1)=initvalue;
data(1,n+1)=initvalue;
data(n+1,1)=initvalue;
data(n+1,n+1)=initvalue;
data=mytry(data,n,c,n);
function =rnd(absvalue)
%扩展的随机函数生成器,产生绝对值小于absvalue的随机实数
x=(rand(1)-0.5)*2*absvalue;
function =mytry(data,m,r,n)
%square=========================================
%x-------x
%---------
%-- 0 -- 由四个x定中间的0
%---------
%x-------x
for i=1:m:n
for j=1:m:n
data((i+i+m)/2,(j+j+m)/2)=(data(i,j)+data(i,j+m)+data(i+m,j)+data(i+m,j+m))/4+rnd(r);
end
end
%diamond========================================
%----x--
%-----
%x- 0 -x 由四个x定中间的0
%--------
%----x---
%钻石步骤的横向部分
%line No.1
for j=1+m/2:m:n
data(1,j)=(data(1,j+m/2)+data(1+m/2,j)+data(1,j-m/2)+data(n+1-m/2,j))/4+rnd(r);
end
%middle
for i=1+m:m:n
for j=1+m/2:m:n
data(i,j)=(data(i,j+m/2)+data(i+m/2,j)+data(i,j-m/2)+data(i-m/2,j))/4+rnd(r);
end
end
%line last
for j=1+m/2:m:n
data(n+1,j)=(data(n+1,j+m/2)+data(1+m/2,j)+data(n+1,j-m/2)+data(n+1-m/2,j))/4+rnd(r);
end
%钻石步骤的纵向部分
%line No.1
for i=1+m/2:m:n
data(i,1)=(data(i,1+m/2)+data(i+m/2,1)+data(i,n+1-m/2)+data(i-m/2,1))/4+rnd(r);
end
%middle
for i=1+m/2:m:n
for j=1+m:m:n
data(i,j)=(data(i,j+m/2)+data(i+m/2,j)+data(i,j-m/2)+data(i-m/2,j))/4+rnd(r);
end
end
% line last
for i=1+m/2:m:n
data(i,n+1)=(data(i,1+m/2)+data(i+m/2,n+1)+data(i,n+1-m/2)+data(i-m/2,n+1))/4+rnd(r);
end
if (m>2)
data=mytry(data,m/2,r/2,n); %递归
end createmap.m文件clc
clear all
close all
%map1 随机地表。
Z1=SquareDiamond(6,2,8);
figure(1);
surf(Z1); %画出三维曲面
shading flat; %各小曲面之间不要网格
%map2 山峰图
h=;
x0=;
y0=;
xi=;
yi=;
Z2=CeatHill(3,h,x0,y0,xi,yi,65);
figure(2);
surf(Z2); %画出三维曲面
shading flat; %各小曲面之间不要网格
%map3 合成图
Z3=max(Z1,Z2);
figure(3);
surf(Z3); %画出三维曲面
shading flat; %各小曲面之间不要网格 回复 9 # sunminmin 的帖子
程序比较长,我们外行人读起来还是比较恼火,楼主不如直接告诉我们你想提取那个图的坐标,这样目的性强点! 回复 10 # meiyongyuandeze 的帖子
运行createmap.m文件会显示3副图,分别为随机地表图1、山峰图2、地表图与山峰图叠加生成的图3。我要读取图3的坐标。 用readbmp.m能读取dx.bmp显示图形,为什么我把I=imread('dx.bmp'); %读入一幅图片改成I=imread('map.bmp'); 把gao=;=meshgrid(1:0.1:5)做相应修改,还是不能读取map.bmp显示图形。提示??? Index exceeds matrix dimensions. Error in ==> dizhenyuce at 22 BW=II(:,:,1)+II(:,:,2)+II(:,:,3);
下面为readbmp.m文件:
I=imread('dx.bmp'); %读入一幅图片
%I=I(33:375,74:508,:); %须事先人工确定行标和列标
%提取坐标框内部分
I1=I(:,:,1); %提取红色灰度矩阵
pixel_black=(I1==0);
number_col=sum(pixel_black);
number_row=sum(pixel_black');
j1=find(number_col==max(number_col));
number_col(j1)=-1;
j2=find(number_col==max(number_col));
i1=find(number_row==max(number_row));
number_row(i1)=-1;
i2=find(number_row==max(number_row));
I=I(min(i1,i2):max(i1,i2),min(j1,j2):max(j1,j2),:);
%提取各等高线上颜色灰度值
II=I;
II(II==255)=0;
II(II>0)=255;
BW=II(:,:,1)+II(:,:,2)+II(:,:,3);
=find(BW);
up_row_id=min(row_id);
up_col_id=col_id(round(mean(find(row_id==up_row_id))));
left_col_id=min(col_id);
left_row_id=row_id(round(mean(find(col_id==left_col_id))));
pixel_BW=BW(up_row_id:left_row_id,up_col_id);
row_id=find(pixel_BW)-1+up_row_id;
yanse(:,1:3)=I(row_id,up_col_id,:);
%yanse=[0 0 143;
% 0 47 255
% 0 223 255
% 143 255 111
% 255 207 0
% 255 31 0
% 127 0 0]; %须事先人工确定各等高线颜色灰度值,用到了getpts函数
=size(I(:,:,1));
BW=zeros();
x_xishu=4/(n-1);
y_xishu=4/(m-1);
gao=;
%提取各等高线上点的三维坐标
xyz=[];
for i=1:7
BW1=BW;
BW1(I(:,:,1)==yanse(i,1)&I(:,:,2)==yanse(i,2)&I(:,:,3)==yanse(i,3))=1;
=find(BW1);
xyz=;
end
xyz=xyz(1:3:end,:);
xyz=;
x=xyz(:,1);
y=xyz(:,2);
z=xyz(:,3);
%产生网格数据,进行散乱节点插值拟合
=meshgrid(1:0.1:5)
z1=griddata(x,y,z,x1,y1,'v4');
=size(x1);
xyz1=
%画三维面图
figure
surf(x1,y1,z1)
shading flat; %各小曲面之间不要网格
zlim()
xlabel('X(单位:千米)')
ylabel('Y(单位:千米)')
zlabel('Z(单位:千米)')
回复 11 # sunminmin 的帖子
怎样修改能读取任何.bmp文件显示图形? 本帖最后由 sunminmin 于 2011-5-13 08:48 编辑
回复 9 # sunminmin 的帖子
谢谢大家能帮忙,还是要靠自己通过学习解决问题 你会怎么从等高线图中提取三维坐标吗?
页:
[1]
2