How to populate 2D array from 2 vectors perpendicular to each other?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I have 2 files. Each file contains 4 columns. Column 1, 2 and 3 define the location of a point in x, y, and z-axis respectively, on a Cartesan coordinate. Column 4 is the Value of that point. 'Inline' and 'Crossline' are perpendicular to each other and intersect at (0,0) coordinate. How do I populate a 2D array from these 2 files? (The data below are simplified. The real data has finer resolution)
Inline =
2.800000 0 15.0000 1.3678
1.000000 0 15.0000 1.2000
0 0 15.0000 1.0000
-1.000000 0 15.0000 1.2000
-2.500000 0 15.0000 1.5688
Crossline =
0 -2.300000 15.0000 1.3546
0 -1.000000 15.0000 1.1000
0 0 15.0000 1.0000
0 1.000000 15.0000 1.1500
0 2.700000 15.0000 1.3558
7 comentarios
Walter Roberson
el 10 de En. de 2013
Each of those groups is "V-shaped"; the inputs are not "two vectors perpendicular to each other".
Respuesta aceptada
Roger Stafford
el 10 de En. de 2013
This is my attempt to generalize your description. Let (x0,y0,z0) be the point of intersection of your two lines. (Note: The lines you gave intersected at (0,0,15).) I have abbreviated the names of the lines as 'I' and 'C'.
[XI,XC] = ndgrid(I(:,1),C(:,1));
[YI,YC] = ndgrid(I(:,2),C(:,2));
[ZI,ZC] = ndgrid(I(:,3),C(:,3));
[VI,VC] = ndgrid(I(:,4),C(:,4));
OUT = [XI(:)+XC(:)-x0,YI(:)+YC(:)-y0),ZI(:)+ZC(:)-z0,VI(:).*VC(:)];
I depended entirely on your stated expected output, since I could not understand your verbal description of it at all. I gather you want to complete the "grid" consisting of all possible pairing of points on the two lines and at each grid point you want the value to be the product of the corresponding values given by the two lines.
Roger Stafford
3 comentarios
Roger Stafford
el 10 de En. de 2013
The way I see it, the first three columns of "inline" and "crossline" do each constitute points along straight lines. These are in fact parallel to the x and y axes, respectively. In the output the x, y, z points are located in a rectangular gridwork based on intersections of lines which run through the points along each line and are parallel to the two respective lines. At least that is the way that seemed most likely. The explanation given was certainly not helpful.
Más respuestas (1)
Walter Roberson
el 10 de En. de 2013
[a,b] = ndgrid(A(:,1), B(:,2));
c = bsxfun(@times, A(:,4), B(:,4).');
Output = [a(:), b(:), A(:,3)*ones(size(A,1)*size(B,1),1), c(:)];
1 comentario
Andrei Bobrov
el 10 de En. de 2013
Editada: Andrei Bobrov
el 10 de En. de 2013
[a,b,c] = ndgrid(A(:,1), B(:,2), A(:,3));
d = A(:,4)*(B(:,4).');
Output = [a(:), b(:), c(:), d(:)];
Ver también
Categorías
Más información sobre Function Creation en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!