Le 30/01/2017 à 00:25, Max Rossi a écrit :
Hi all,

I'm trying to plot in Scilab the surface error of different non rectangular
panels (see attachments).
At a certain point of my code, everything is turned into nice XYZ data but
the only way I found to plot the data is to generate a grid and fit the Z
above it as follows:

         tl_coef = cshep2d(XYZ);
         xpx = round((max(X)-min(X))/pix_size);
         ypx = round((max(Y)-min(Y))/pix_size);
         vx = linspace(min(X),max(X),xpx);
         vy = linspace(min(Y),max(Y),ypx);
         [Xg,Yg] = ndgrid(vx,vy);
         map1 = eval_cshep2d(Xg,Yg, tl_coef);

When the panel is not rectangular or circular I'm in trouble assigning %nan
to points that are inside the grid but outside the panel XY measured
locations.
Is there any smart way to manage the problem?

     Hello,

/If I understand well, you want a way to put Nan for those
 grid points which are far from interpolation points (because
 the values got by cshep2d are not really meaningful due to
 large errors) ? For "exterior points", assuming the interpolation
 region is more or less convex a possibility would be to compute
 the convex-hull of the (x-y coordinates) interpolation points and
 to test if each grid point is inside but I 'm not sure you can do
 that immediatly with scilab : the convex hull function was part of
 metanet which is not embedded in scilab since a while, maybe
 it is still available through atoms. Btw I don't remenber if there
 is a "inside polygon test" in scilab.

  Otherwise you could try a force brute method (which could be
 accelerated) by computing the minimal distance between each grid
 point to the interpolations points and discarding those which
 are too far. This can be done like this : (assuming that X and Y
 are the coordinates of the interpolation points)

[Xg,Yg] = ndgrid(vx,vy);
Zg = eval_cshep2d(Xg,Yg, tl_coef);

// compute distance betwen grid and interpolation points
ngp = size(Zg,"*")
dmin = zeros(Zg)
for k = 1:ngp
    dmin(k) = sqrt(min( (Xg(k) - X).^2 + (Yg(k) - Y).^2) )
end

// discard points which are too far
threshold_dist = 0.1   // to be set adequately...
Zg(dmin > threshold_dist) = %nan


  hth
 Bruno





///
_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to