equivalent for Matlab patch() in Scilab?

classic Classic list List threaded Threaded
3 messages Options
Michel Audette Michel Audette
Reply | Threaded
Open this post in threaded view
|

equivalent for Matlab patch() in Scilab?

Dear Scilab users,

can someone indicate to me if there is an equivalent to the Matlab patch() function in Scilab?

Thank you for your kind consideration.

Best wishes,

Michel

--
Michel Audette, Ph.D.
R & D Engineer,
Kitware Inc.,
Chapel Hill, N.C.

Collette yann-2 Collette yann-2
Reply | Threaded
Open this post in threaded view
|

Re: equivalent for Matlab patch() in Scilab?

Michel Audette a écrit :

> Dear Scilab users,
>
> can someone indicate to me if there is an equivalent to the Matlab
> patch() function in Scilab?
>
> Thank you for your kind consideration.
>
> Best wishes,
>
> Michel
>
> --
> Michel Audette, Ph.D.
> R & D Engineer,
> Kitware Inc.,
> Chapel Hill, N.C.
>
Hello,

Yes, plot3d can do the same things as patch.
If you have access to a nightly build, do a "help plot3d". There are 2
examples of use of plot3d like patch:
- a simple plot3d with a X,Y,Z
- a plot3d with faces and vertex.

YC

Collette yann-2 Collette yann-2
Reply | Threaded
Open this post in threaded view
|

Re: equivalent for Matlab patch() in Scilab?

Here is the examples of the plot3d help page:

// The plot3d function to draw patches:
// patch(x,y,[z])
// patch(x,y,[list(z,c)])
// The size of x : number of points in the patches x number of patches
// y and z have the same sizes as x
// c:
// - a vector of size number of patches: the color of the patches
// - a matrix of size number of points in the patches x number of
//   patches: the color of each points of each patches

// Example 1: a set of triangular patches

x = [0 0;
     0 1;
     1 1];

y = [1 1;
     2 2;
     2 1];

z = [1 1;
     1 1;
     1 1];

tcolor = [2 3]';

subplot(2,2,1);
plot3d(x,y,list(z,tcolor));
xtitle('A triangle set of patches');

// Example 2: a mixture of triangular and quadrangular patches

xquad = [5, 0;
         10,0;
         15,5;
         10,5];
       
yquad = [15,0;
         20,10;
         15,15;
         10,5];
       
zquad = ones(4,2);

xtri = [ 0,10,10, 5, 0;
        10,20,20, 5, 0;
        20,20,15,10,10];
       
ytri = [ 0,10,20, 5,10;
        10,20,20,15,20;
         0, 0,15,10,20];
       
ztri = zeros(3,5);

subplot(2,2,3);
plot3d(xquad,yquad,zquad);
plot3d(xtri,ytri,ztri);
xtitle('Mixing triangle and quadrangle set of patches');

// Example 3: some rabbits

rabxtri = [ 5,  5, 2.5,  7.5, 10;
            5, 15, 5,   10,   10;
           15, 15, 5,   10,   15];
         
rabytri = [10, 10, 9.5,  2.5, 0;
           20, 10, 12,   5,   5;
           10   0   7    0    0];
rabztri = [0,0,0,0,0;
           0,0,0,0,0;
           0,0,0,0,0];

rabtricolor_byface = [2 2 2 2 2];

rabtricolor = [2,2,2,2,2;
               3,3,3,3,3;
               4,4,4,4,4];
             
rabxquad = [0, 1;
            0, 6;
            5,11;
            5, 6];
           
rabyquad = [18,23;
            23,28;
            23,28;
            18,23];
           
rabzquad = [1,1;
            1,1;
            1,1;
            1,1];

rabquadcolor_byface = [2 2];

rabquadcolor = [2,2;
                3,3;
                4,4;
                5,5];

subplot(2,2,2);
plot3d(rabxtri, rabytri, list(rabztri,rabtricolor));
plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor));
h = gcf();
h.children(1).background = 1;
xtitle('A psychedelic rabbit set of patches');

subplot(2,2,4);
plot3d(rabxtri, rabytri, list(rabztri,rabtricolor_byface));
plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor_byface));
h = gcf();
h.children(1).background = 1;
xtitle('A standard rabbit set of patches');




// Vertex / Faces example: 3D example

// The vertex list contains the list of unique points composing each patch
// The points common to 2 patches are not repeated in the vertex list

vertex = [0 1 1;
          0 2 2;
          1 2 3;
          1 1 4];

// The face list indicates which points are composing the patch.      
face = [1 2 3;
        1 3 4];

tcolor = [2 3]';
       
// The formula used to translate the vertex / face representation into
x, y, z lists

xvf =
matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))';
yvf =
matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))';
zvf =
matrix(vertex(face,3),size(face,1),length(vertex(face,1))/size(face,1))';

scf();
subplot(2,1,1);
plot3d(xvf,yvf,list(zvf,tcolor));
xtitle('A triangle set of patches - vertex / face mode - 3d');

// 2D test
// We use the 3D representation with a 0 Z values and then switch to 2D
representation

// Vertex / Faces example: 3D example

// The vertex list contains the list of unique points composing each patch
// The points common to 2 patches are not repeated in the vertex list

vertex = [0 1;
          0 2;
          1 2;
          1 1];

// The face list indicates which points are composing the patch.      
face = [1 2 3;
        1 3 4];
       
// The formula used to translate the vertex / face representation into
x, y, z lists

xvf =
matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))';
yvf =
matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))';
zvf =
matrix(zeros(vertex(face,2)),size(face,1),length(vertex(face,1))/size(face,1))';

subplot(2,1,2);
plot3d(xvf,yvf,list(zvf,tcolor));
xtitle('A triangle set of patches - vertex / face mode - 2D');
a = gca();
a.view = '2d';



Yann Collette a écrit :

> Michel Audette a écrit :
>> Dear Scilab users,
>>
>> can someone indicate to me if there is an equivalent to the Matlab
>> patch() function in Scilab?
>>
>> Thank you for your kind consideration.
>>
>> Best wishes,
>>
>> Michel
>>
>> --
>> Michel Audette, Ph.D.
>> R & D Engineer,
>> Kitware Inc.,
>> Chapel Hill, N.C.
>>
> Hello,
>
> Yes, plot3d can do the same things as patch.
> If you have access to a nightly build, do a "help plot3d". There are 2
> examples of use of plot3d like patch:
> - a simple plot3d with a X,Y,Z
> - a plot3d with faces and vertex.
>
> YC