How can I plot a combined of attached photos (triangular domain)?

1 visualizzazione (ultimi 30 giorni)
Hi friends
I plotted some figures using followin code with several Delta:
delta = 0.05;
[z, y] = meshgrid(0:delta:0.8660254, -0.5:delta:0.5);
s = (0.1069166660e0 .* (0.36e2 .* (z - sqrt(0.3e1) ./ 0.2e1) .^ 2 .* y .^ 2 + (0.3e1 .* y .^ 2 - z .^ 2 - 0.2e1 .* (z - sqrt(0.3e1) ./ 0.2e1) .* z) .^ 2) ./ (0.370370196e0 .* (z - sqrt(0.3e1) ./ 0.2e1) .* (0.3e1 .* y .^ 2 - z .^ 2) + 0.1e1) + 0.1e1) ./ (0.370370196e0 .* (z - sqrt(0.3e1) ./ 0.2e1) .* (0.3e1 .* y .^ 2 - z .^ 2) + 0.1e1);;
s(y<-0.5773502692.*z) = NaN;
s(y>0.5773502692.*z) = NaN;
surf(z, y, s,'FaceColor','interp','FaceLighting','phong');
the following figures have been plotted using delta=0.005, 0.005, 0.05 and 0.01, respectively.
As it is obvious, the boundary of triangular domain is good in 1st and 2nd figures but their Edges is so high which if i show them, the figure's color will be black!
about the third figure, the number of edges is good but its boundary is so bad.
I want to generate the combining of 1st figure and the figure with similar edge density to 3rd figure.
If you know please answer to my question as simple as you can.
Thanks a lot

Risposta accettata

Stephen23
Stephen23 il 20 Gen 2016
Modificato: Stephen23 il 20 Gen 2016
You could try plotting both of them on the same axes:
funZY = @(d) meshgrid(0:d:0.8660254, -0.5:d:0.5);
funS = @(z,y) (0.1069166660e0 .* (0.36e2 .* (z - sqrt(0.3e1) ./ 0.2e1) .^ 2 .* y .^ 2 + (0.3e1 .* y .^ 2 - z .^ 2 - 0.2e1 .* (z - sqrt(0.3e1) ./ 0.2e1) .* z) .^ 2) ./ (0.370370196e0 .* (z - sqrt(0.3e1) ./ 0.2e1) .* (0.3e1 .* y .^ 2 - z .^ 2) + 0.1e1) + 0.1e1) ./ (0.370370196e0 .* (z - sqrt(0.3e1) ./ 0.2e1) .* (0.3e1 .* y .^ 2 - z .^ 2) + 0.1e1);
funN = @(z,y) y<(-0.5773502692.*z) | y>(0.5773502692.*z);
[surfZ,surfY] = funZY(0.0005);
[gridZ,gridY] = funZY(0.05);
surfS = funS(surfZ,surfY);
gridS = funS(gridZ,gridY);
surfS(funN(surfZ,surfY)) = NaN;
gridS(funN(gridZ,gridY)) = NaN;
surf(surfZ, surfY, surfS,'FaceColor','interp','FaceLighting','phong','EdgeColor','none');
hold on
surf(gridZ, gridY, gridS,'FaceColor','none','FaceLighting','phong');
view(43,20)
  4 Commenti
Moein
Moein il 20 Gen 2016
thank you very much Stephen
your idea was the best one and i could plot the best figure!
look at it:
Stephen23
Stephen23 il 21 Gen 2016
I am glad to help. You can also Accept the answer that best resolves your question.

Accedi per commentare.

Più risposte (1)

Mike Garrity
Mike Garrity il 20 Gen 2016
Basically you want the technique I used in this blog post about surface interpolation. You want to draw the high-res one with FaceColor='interp' and EdgeColor='none'. Then, with hold on, you draw the low-res one with FaceColor='none' and EdgeColor='black'. They're not going to line up perfectly around the nans though.
  3 Commenti
Moein
Moein il 20 Gen 2016
I have copied and pasted the definition of function "interpsurf(z, method)" in command window, but it errors:
??? function interpsurf(z, method) | Error: Function definitions are not permitted in this context.
what should i do? can you explain more?
Star Strider
Star Strider il 20 Gen 2016
Save it somewhere on your MATLAB search path as interpsurf.m (in its own .m-file). You should then be able to call it without error.

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by