亲爱的 stackoverflow 用户,
几年前,我用了几个月的数学。在几年没有编程之后,我现在做一个研究项目,作为一名学生,我在其中使用 Matlab。我在 stackoverflow 上找到了很多很好的帮助,但现在我遇到了以下问题:
我有一个矩形网格上节点之间的连接数据集,每个节点都有可能连接到它的 8 个邻居。我的测量采用 3 x n 矩阵的形式,其中前两个值指定一个节点,第三个值指定它们是否连接,网格的大小是预先确定的。通常有大约十条线来自两个或三个至少彼此相邻的节点。我的研究项目的目标是计算这组线周围距离 r 处的面积。
到目前为止,我已经能够使用下面的代码绘制线条,为此我在 stackoverflow 上使用了一些代码,这非常有用。但是,我无法在一定距离处获得围绕它的等高线(我希望用它来计算该等高线内的面积)。gplot 函数返回两个向量,每行有两个坐标,我发现很难将其转换为更有用的东西。我尝试在与线的距离处定义一个值 Z,以随着与线的距离而下降,因此我得到了来自这些线的斜率。从这个斜率我可以计算轮廓线。但是,因为这些线只是坐标,我不知道如何计算到那条线的距离,而不是它们何时成为函数。
我真的很茫然。我希望我已经在这里清楚地发布了我的问题。这是我第二次发布这个问题,我现在在代码和图片中添加了注释以更好地解释自己。感谢您提供的任何建议!
到目前为止,xls 文件是我上面提到的 3 x n 矩阵,我还在下面的代码中以矩阵形式写了它的内容,所以我的问题更容易理解:
%# here i set my data/constants
filename='random.xls'; file=xlsread(filename); y=width; x=length;
%# random.xls looks approximately like this, after xlsread(filename) you get
file=[21 22 1;
21 20 1;
15 16 1;
15 14 1;
15 23 1;
14 22 1;
14 21 1;
22 15 1;
23 14 1;
24 15 1;
6 15 1;
5 14 1;
7 14 1;
8 15 1];
%# predefined width and length, i usually get this from the file
width=8; length=4;
%# here i create my adjaceny matrix in a elegant way user amro posted on stackoverflow
%# however i immediately multiply it by 0, creating a y*x by y*x matrix with all zeroes
[X Y] = meshgrid(1:x,1:y); X = X(:); Y = Y(:);
adjacency = squareform( pdist([X Y], 'chebychev') == 1 ); adjacency=adjacency*0;
%# here i take the matrix "file" for which the first two values are node numbers and
%# the third value designates whether there is a connection between the two nodes to
%# fill in the connections in the adjacencymatrix
[nrows,ncols]=size(file);
for r = 1:nrows
if file(r,3)==1
adjacency(file(r,1),file(r,2))=1;
end
end
adjacency=(adjacency+adjacency.');
%# plots the adjacencymatrix
subplot(121), spy(adjacency)
%# plots the connections and designates the nodes, note that the numbers designating
%# the nodes do not match original data, this is a separate problem i have not solved
[xx yy] = gplot(adjacency, [X Y]);
subplot(122), plot(xx, yy, 'ks-', 'MarkerFaceColor','b')
%# these last lines of code for plotting the numbers of the grid i do not fully
%# understand, in here is the cause for the numbers not matching the original data
axis([0 x+1 0 y+1])
[X Y] = meshgrid(1:x,1:y);
X = reshape(X',[],1) + 0.1; Y = reshape(Y',[],1) + 0.1;
text(X, Y(end:-1:1), cellstr(num2str((1:x*y)')) )
xlabel('length')
ylabel('width')
title(filename)
为了澄清我的问题,我添加了这两张图片:当前情节http://imgur.com/5uPd4 我想知道的区域http://imgur.com/WsIbg