sunminmin 发表于 2011-5-4 08:55

求教:如何提取三维坐标!

我要提取 z=x.^2+y.^2 ;=meshgrid(-2:0.1:2,-3:0.1:3);mesh(x,y,z);的三维坐标!
而且要将做坐标排成三列,每一行就是一个点的坐标。求教,望高人指点。急急!!!

sunminmin 发表于 2011-5-4 09:02

回复 1 # sunminmin 的帖子

我用xyz=' 得不到将坐标排成三列的结果。还有就是如果xyz=.....得到将坐标排成三列保存进txt文件中,如何在matlab中读取这个txt文件显示和z=x.^2+y.^2一样的图形。望指点,我刚学matlab,谢谢

sunminmin 发表于 2011-5-4 09:06

回复 2 # sunminmin 的帖子

希望路过的也指点指点,不胜感激。帮我顶一下,谢谢。

meiyongyuandeze 发表于 2011-5-5 00:02

本帖最后由 meiyongyuandeze 于 2011-5-5 00:04 编辑

直接画图及可以,不明白为什么要写成那种形式呢?如果真的需要,应该实现起来不难!

meiyongyuandeze 发表于 2011-5-5 00:03

回复 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应该没问题!

sunminmin 发表于 2011-5-5 18:14

回复 5 # meiyongyuandeze 的帖子

谢谢!是正确的。我用matlab做随机地形图的生成,想把其中一幅地形图map1的坐标保存进txt文件中,然后利用vc++与matlab混合编程,利用matlab引擎,读取txt文件生成地形图map1。把x,y,z排成三列(即每一行为一个点的坐标)存进txt中,方便在vc++中读取。

sunminmin 发表于 2011-5-5 18:19

回复 6 # sunminmin 的帖子

生成固定的地形图map1,下一步在map1中绘制轨迹图,我想用vc++和matlab混合编程通过matlab引擎做一个简单的轨迹规划。

meiyongyuandeze 发表于 2011-5-5 19:33

回复 7 # sunminmin 的帖子

祝好运,呵呵!

sunminmin 发表于 2011-5-6 20:28

如何获取下面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; %各小曲面之间不要网格

meiyongyuandeze 发表于 2011-5-7 00:11

回复 9 # sunminmin 的帖子

程序比较长,我们外行人读起来还是比较恼火,楼主不如直接告诉我们你想提取那个图的坐标,这样目的性强点!

sunminmin 发表于 2011-5-7 00:29

回复 10 # meiyongyuandeze 的帖子

运行createmap.m文件会显示3副图,分别为随机地表图1、山峰图2、地表图与山峰图叠加生成的图3。我要读取图3的坐标。

sunminmin 发表于 2011-5-7 10:42

用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(单位:千米)')


sunminmin 发表于 2011-5-7 10:46

回复 11 # sunminmin 的帖子

怎样修改能读取任何.bmp文件显示图形?

sunminmin 发表于 2011-5-13 08:42

本帖最后由 sunminmin 于 2011-5-13 08:48 编辑

回复 9 # sunminmin 的帖子
谢谢大家能帮忙,还是要靠自己通过学习解决问题

ahfl1028 发表于 2015-12-22 20:14

你会怎么从等高线图中提取三维坐标吗?
页: [1] 2
查看完整版本: 求教:如何提取三维坐标!