# Rendering Engine Using Matlab, matrices and vectors

This topic is 1756 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

HI, I am a junior computer science and electrical engineering student. I have taken a calc 4 class in linear algebra and differential equations. For our final project I was given the opportunity to make a rendering engine in matlab using matrices and vectors. I created a car and four building that I could drive around. I started just by pushing around data points. I got the car to make a random decision every time the car was given the option to either take a left, right, or go straight. The car drove around randomly for however many passes I wanted to make.

I took a class in computer mathematical programming next. In this classes we used matrices and vectors in matlab to create 3D rendering. I continued with my project and got the car to follow the tangent line of any function that I wanted to feed it. I also made a function where my car could go down a level or up a level. I made a 3 layer area with 3 by 3 of building where I gave the car a decision of these things: straight, left, right, spiral up to next floor, if at top floor come up from the bottom to bottom level, spiral down floor, if at bottom floor go to top floor. I would like to add an opengl api layer to it to give it some graphics. I would like to see if I could add a physics engine to this. I would also like to add a control engine to this. I would also know how far I can push this idea. Here is some of my code:

Here is a car doing a basic figure 8 always tangent to the line of any function you want to give to it:

echo off
syms theta
f=position(theta);
velocity=diff(f,theta,1);

pause on
b =  0;           % x perspective view
c = 30;            % y perspective view
d = 70;            % z perspective view

x = 0;             % x theta
y = 0;
z = 0;             % z theta

ty1 = 0;            % y location

tx2 = 0;
ty2 = 0;
tz2 = 0;
tx3 = 0;
ty3 = 0;
tz3 = 0;

sx = 1;            % x scaling factor
sy = 1;            % y scaling facotr
sz = 1;            % z scaling facotr

wxmin = -190;
wxmax = 190;
wymin = -50;
wymax = 20;

inc = pi/24;       % theta rotaion inc
inc2 = 2.3;
pse = .001;        % pause delay

dCar = [-6.5 -6.5 -6.5 -6.5 -2.5 -2.5 -.75 -.75 3.25 3.25 4.5 4.5 6.5 6.5 6.5 6.5;
0 0 2.5 2.5 2.5 2.5 4 4 4 4 2.5 2.5 2.5 2.5 0 0;
-2.5 2.5 2.5 -2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 2.5 -2.5;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];

Trans = [1 0 0 0; 0 1 0 0; 0 0 1 1; 0 0 0 1] * dCar; % pushes DP1 off the origan

A = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1;
1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0;
0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0;
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0;
0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0;
0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0;
0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0;
0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0;
0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1;
1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0];

Zall = horzcat(A);         %entire ajacinty martic

for newstep = 0 : -pi/50 : -4*pi/1
location=subs(f,theta,newstep);
direction=subs(velocity,theta,newstep);
phi = atan2(direction(2,1),direction(1,1))

T  = [1 0 0 (80*cos(newstep)); 0 1 0 ty1; 0 0 1 (40*sin(2*newstep)); 0 0 0 1];

S  =  [sx 0 0 0;0 sy 0 0;0 0 sz 0;0 0 0 1];                           % Shear Matrix

Rx = [1 0 0            0; 0 cos(x) -sin(x) 0; 0 sin(x) cos(x) 0; 0 0 0 1];      % x Rotation matrix
Ry = [cos(phi) 0 -sin(phi) 0; 0 1 0 0; sin(phi) 0 cos(phi) 0;0 0 0 1];     % y Rotation matrix
Rz = [cos(z) -sin(z) 0 0; sin(z) cos(z) 0  0; 0 0 1 0 ; 0 0 0 1];    % z Rotation matrix

P  = [1 0 -b/d 0;0 1 -c/d 0 ;0 0 0 0;0 0 -1/d 1];                    % Projection matrix
DP = S*T*Rx*Ry*Rz*Trans;
D3 = horzcat(DP);

Dpro = P * D3;
GP1 = Dpro(1:3,:)./[Dpro(4,:);Dpro(4,:);Dpro(4,:)];
GP2 = GP1(1:2,:);
D2T = transpose(GP2);
gplot(Zall,D2T,'K')
axis ([wxmin wxmax,wymin wymax])
pause(pse)

end



you will need the function position. From here you can control what line you want the car to follow.

function [f] = position(theta)
f=[4*cos(theta);2*sin(2*theta)]
end



ops, no good.

##### Share on other sites

same code as bellow

##### Share on other sites

car driving in circle, real basic, first I push my car's data points off the origin and then I use rotation matrices to rotate the car.

pause on
b = 0;
c = 10;
x = 0;
y = 0;
z = 0;
d = 40;
tx = 0;
ty = 0;
tz = 0;
sx = 1;
sy = 1;
sz = 1;
r = 0;
DH = [-6.5 -6.5 -6.5 -6.5 -2.5 -2.5 -.75 -.75 3.25 3.25 4.5 4.5 6.5 6.5 6.5 6.5;
-2 -2 .5 .5 .5 .5 2 2 2 2 .5 .5 .5 .5 -2 -2;
-2.5 2.5 2.5 -2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 2.5 -2.5;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
DH2 = [1 0 0 0; 0 1 0 0; 0 0 1 -25; 0 0 0 1] * DH;
A = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1;
1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0;
0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0;
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0;
0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0;
0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0;
0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0;
0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0;
0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1;
1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0];

while r <= 2*pi
%T =  [1 0 0 tx; 0 1 0 ty; 0 0 1 tz; 0 0 0 1];
%S = [sx 0 0 0;0 sy 0 0;0 0 0 sz;0 0 0 1];
Rx = [1 cos(x) -sin(x) 0; 0 sin(x) cos(x) 0; 0 0 1 0; 0 0 0 1];
Ry = [cos(y) 0 sin(y) tx;0 1 0 ty;-sin(y) 0 cos(y) tz;0 0 0 1];
Rz = [cos(z) -sin(z) 0 0; sin(z) cos(z) 0 0; 0 0 1 0 ; 0 0 0 1];
P = [1 0 -b/d 0;0 1 -c/d 0 ;0 0 0 0;0 0 -1/d 1];
%DP = P*S*T*Rx*Ry*Rz*DH2;
S = [cos(r) 0 sin(r) tx;0 1 0 ty;-sin(r) 0 cos(r) tz;0 0 0 1];
DP = P*S*DH2;
DP1 = DP(1:3,:)./[DP(4,:);DP(4,:);DP(4,:)];
D2 = DP1(1:2,:);
D2T = transpose(D2);
gplot(A,D2T,'-')
axis ([-40 40,-20 20])
pause(.001)
r = r + (pi/48);
end
pause off



##### Share on other sites

This is my car randomly making a decision at every intersection which direction it whats to take around four buildings. I pushed the car off the origin and basically pushed the car's data points if I wanted it to go straight, if i wanted to do a rotation I did a rotation matrix.

:


pause on
b = -40;           % x perspective view
c = 30;            % y perspective view
d = 80;            % z perspective view
x = 0;             % x theta
z = 0;             % z theta
tx = 0;            % x location
ty = 0;            % y location
tz = 0;            % z location
sx = 1;            % x scaling factor
sy = 1;            % y scaling facotr
sz = 1;            % z scaling facotr
n = 0;             % # of loops
inc = pi/12;       % theta rotaion inc
inc2 = 2.5;
pse = .001;        % pause delay
wxmin = -60;
wxmax = 35;
wymin = -20;
wymax = 20;
tx1 =0;
ty1 = 0;
tz1 = 0;
tx2= 0;
ty2 = 0;
tz2 = 0;
tx3 = 0;
ty3 = 0;
tz3 = 0;

DP1 = [-6.5 -6.5 -6.5 -6.5 -2.5 -2.5 -.75 -.75 3.25 3.25  4.5 4.5  6.5 6.5 6.5    6.5   -0.75  -0.75 3.25  3.25        2      2;
0    0  2.5  2.5  2.5  2.5    4    4    4    4  2.5 2.5  2.5 2.5   0      0    1.25   1.25 1.25  1.25     1.25   1.25;
-2.5  2.5  2.5 -2.5 -2.5  2.5 -2.5  2.5 -2.5  2.5 -2.5 2.5 -2.5 2.5 2.5   -2.5    2.5   -2.5  2.5   -2.5       10    -10;
1    1    1    1    1    1    1    1    1    1    1   1    1   1   1      1      1      1    1      1        1      1];

DP2 = [-5 5 5 -5 -5 5 5 -5; 0 0 0 0 10 10 10 10; 0 0 10 10 0 0 10 10; 1 1 1 1 1 1 1 1];

DP3 = [1 0 0 0; 0 1 0 0; 0 0 1 -40; 0 0 0 1] * DP2;
DP4 = [1 0 0 -30; 0 1 0 0; 0 0 1 -40; 0 0 0 1] * DP2;
DP5 = [1 0 0 -30; 0 1 0 0; 0 0 1 0; 0 0 0 1] * DP2;
Trans = [1 0 0 0; 0 1 0 0; 0 0 1 -15; 0 0 0 1] * DP1; % pushes DP1 off the origan

DP6 = [5    6   7     8    9    10   11    12   13    14  15    16  17    18 19     20    20     20   20    20  20    20  20    20  20    20  20    20  20    20  20   20   -40  -41  -42 -43 -44 -45 -46 -47 -48 -49 -50 -50 -50 -50 -50  -50    -50      -50    -50    -50 -50      -50   -50      -50 -50      -50 -50      -50   -50   -50   -50 -50 ;
0    0   0     0    0     0    0     0    0     0   0     0   0     0  0      0     0      0    0     0   0     0   0     0   0     0   0     0   0     0   0    0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0    0      0        0      0      0   0        0     0        0   0        0   0        0     0     0     0   0 ;
20 19.5  19  18.5   18  17.5   17  16.5   16  15.5  15  14.5  14  13.5 13   12.5   -40    -41  -42   -43 -45   -47 -49   -51 -53   -55 -55   -55 -55   -55 -55  -55   -55  -55  -55 -55 -55 -55 -55 -55 -55 -55 -55 -55 -55 -55 -55  -55     12     12.5     13   13.5  14     14.5    15     15.5  16     16.5  17     17.5  18.5    19  19.5  20;
1    1   1     1    1     1    1     1    1     1   1     1   1     1  1      1     1      1    1     1   1     1   1     1   1     1   1     1   1     1   1    1     1    1    1   1   1   1   1   1   1   1   1   1   1   1   1    1      1        1      1      1   1        1     1        1   1        1   1        1     1     1     1   1];

D = [
0  1  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   1 ;
1  0  1  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  1  0  1   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  1  0   1  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  1   0  1  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   1  0  1  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  1  0  1  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  1  0  1  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  1  0  1  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  1  0  1 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  1  0 1   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  1 0   1  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 1   0  1  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   1  0  1  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  1  0  1    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  1  0    1    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  1    0    1     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    1    0     1   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    1     0   1   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     1   0   1   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   1   0   1   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   1   0   1   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   1   0   1   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   1   0   1   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   1   0   1   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   1   0   1   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   1   0   1   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   1   0   1   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   1   0   1   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0  ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   1   0   1   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   1   0   1     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0  ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   1   0     1    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   1     0    1    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     1    0    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    1    0   1   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    1   0   1   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   1   0   1   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0  ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   1   0   1   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   1   0   1   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   1   0   1   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   1   0   1   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   1   0   1   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   1   0   1   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   1   0   1   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   1   0   1   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   1   0   1   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   1   0   1   0    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   1   0   1    0   0   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   1   0    1   0   0   0   0   0   0   0   0   0    0   0   0   0   0;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   1    0   1   0   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    1   0   1   0   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   1   0   1   0   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   1   0   1   0   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   1   0   1   0   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   1   0   1   0   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   1   0   1   0   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   1   0   1   0    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   1   0   1    0   0   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   1   0    1   0   0   0   0  ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   1    0   1   0   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    1   0   1   0   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   1   0   1   0 ;
0  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   1   0   1;
1  0  0  0   0  0  0  0  0  0  0 0   0  0  0  0    0    0     0   0   0   0   0   0   0   0   0   0   0   0   0   0     0    0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0    0   0   0   0   0   0   0   0   0   0    0   0   0   1   0 ];

A = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0;
1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0;
0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0;
0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0;
1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0];

B = [0 1 0 1 1 0 0 0;
1 0 1 0 0 1 0 0;
0 1 0 1 0 0 1 0;
1 0 1 0 0 0 0 1;
1 0 0 0 0 1 0 1;
0 1 0 0 1 0 1 0;
0 0 1 0 0 1 0 1;
0 0 0 1 1 0 1 0];

Znew = zeros(8,22);
Znew1 = zeros(22,8);
Znew2 = zeros(8,8);
Znew3 = zeros(64,22);
Znew4 = zeros(64,8);
Znew5 = zeros(54,64);

Z3 = vertcat(A,Znew,Znew,Znew,Znew,Znew3);
Z4 = vertcat(Znew1,B,Znew2,Znew2,Znew2,Znew4);
Z5 = vertcat(Znew1,Znew2,B,Znew2,Znew2,Znew4);
Z6 = vertcat(Znew1,Znew2,Znew2,B,Znew2,Znew4);
Z7 = vertcat(Znew1,Znew2,Znew2,Znew2,B,Znew4);
Z8 = vertcat(Znew5,D);
Zall = horzcat(Z3,Z4,Z5,Z6,Z7,Z8) ;        %entire ajacinty martic

P = carPFunction(b,c,d);

decision = 1

while n < 10

if decision == 1

rand = 1

if rand == 1
y =   0;
tx1 = 0;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = 1;
while y <= .5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);

y = y + inc;
end
decision = 2;
end

if rand == 2
y =   0;
tx1 = 0;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = 1;
while y >= -.5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);

y = y - inc;

end
decision = 3;
end

if rand == 3
y =   0;
tx1 = 0;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = 1;
while tx1 >= -30
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);

tx1 = tx1 - inc2;
end

decision = 5;
end
end

if decision == 2
rand = randi(2,1)

if rand == 1
y = .5*pi;
tx1 = 0;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = 1;
while y <= 2*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);

y = y + inc;
end
n = n + 1
decision = 1;
end

if rand == 2
y = .5*pi;
tx1 = 30;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = -1;
while y <= 2*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + inc;
end
decision = 4;
end
end

if decision == 3
rand = randi(2,1)

if rand == 1
y = -.5*pi;
tx1 = 30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = -1;
while y >= -2*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end

decision = 4;

end

if rand == 2
y = -.5*pi;
tx1 = 0;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = 1;
while y >= -2*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end
decision = 1;
n = n + 1
end
end

if decision == 4
rand = randi(3,1);

if rand == 1
y = 0;
tx1 = 30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = -1;

while y >= -.5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end
decision = 3;
end

if rand == 2
y = 0;
tx1 = 30;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = -1;

while y <= .5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + inc;
end
decision = 2;

end

if rand == 3
y =   0;
tx1 = 30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = -1;
while tx1 >= 0
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
tx1 = tx1 - inc2;
end

decision = 8;
end
end

if decision == 5

rand = randi(2,1)

if rand == 1
y = 0;
tx1 = -30;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = 1;
while y <= 1.5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + inc;
end

decision = 6;

end

if rand == 2
y = 0;
tx1 = -30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx = 1;
while y >= -1.5*pi
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end
decision = 7;

end
end

if decision == 6
rand = randi(3,1)

if rand == 1
y = -.5*pi;
tx1 = -30;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx= 1;
while y <= 0
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + inc;
end
decision = 5;

end

if rand == 2
y = -.5*pi;
tx1 = 0;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = -1;
while y <= 0
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + inc;
end

decision = 8;
end

if rand == 3
y   =   1.5*pi;
tx1 = 0;
tz1 = -30;
tz2 = 0;
tz3 = 0;
sx = 1;
while tz1 <= 0
[DP ] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T ] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
tz1 = tz1 + inc2;
end

decision = 3;
end
end

if decision == 7
rand = randi(3,1)

if rand == 1
y   = .5*pi;
tx1 = 0;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx  = -1;
while y >= 0
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end

decision = 8;
end

if rand == 2
y   = .5*pi;
tx1 = -30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx  = 1;
while y >= 0
[DP] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - inc;
end
decision = 5;

end

if rand == 3
y   = .5*pi;
tx1 = -30;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx  = 1;
while tz1 >= -30
[DP]  = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
tz1 = tz1 - inc2;
end

decision = 2;

end
end

if decision == 8

rand = randi(2,1)

if rand == 1
y = 0;
tx1 = 0;
tz1 = 0;
tz2 = 0;
tz3 = 0;
sx= -1;
while y >= -1.5*pi
[DP]  = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y - (inc);
end
decision = 7;

end

if rand == 2
y = 0;
tx1 = 0;
tz1 = 0;
tz2 = 30;
tz3 = -30;
sx = -1;
while y <= 1.5*pi
[DP]  = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
[D2T] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,DP, DP2, DP3, DP4,DP5,DP6,P);
y = y + (inc);
end
decision = 6;
end
end
end

pause off



you will also need carFunction1

:

function [DP ] = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans)

T0  =  [1 0 0 tx1;
0 1 0 ty1;
0 0 1 tz1;
0 0 0   1];

T1 =  [1 0 0 tx2;
0 1 0 ty2;
0 0 1 tz2;
0 0 0   1];

T2 =  [1 0 0 tx3;
0 1 0 ty3;
0 0 1 tz3;
0 0 0   1];

S  =  [sx  0  0  0;
0   sy 0  0;
0   0  sz 0;
0   0  0  1];                        % Shear Matrix

Rx = [    1       0       0  0;
0   cos(x) -sin(x) 0;
0   sin(x)  cos(x) 0;
0       0       0  1];    % x Rotation matrix

Ry = [cos(y)      0  -sin(y) 0;
0       1       0  0;
sin(y)      0   cos(y) 0;
0       0       0  1];     % y Rotation matrix

Rz = [cos(z) -sin(z)      0  0;
sin(z)  cos(z)      0  0;
0       0       1  0;
0       0       0  1];   % z Rotation matrix

DP = S*T0*Rx*T2*Ry*T1*Rz*Trans;


and carGUIFunction:

:

function [ D2T ] = carGUIFunction(pse,wxmin,wxmax,wymin,wymax,Zall,dCar0, dB0, dB1, dB2,dB3,dBoard0,P)

D3 = horzcat(dCar0, dB0, dB1, dB2,dB3,dBoard0);
Dpro = P * D3;
GP1 = Dpro(1:3,:)./[Dpro(4,:);Dpro(4,:);Dpro(4,:)];
GP2 = GP1(1:2,:);
D2T = transpose(GP2);
gplot(Zall,D2T,'K')
axis ([wxmin wxmax,wymin wymax])
pause(pse)



And you will need the carPFunction

function [ P ] = carPFunction( b,c,d )

P  = [1 0 -b/d 0;0 1 -c/d 0 ;0 0 0 0;0 0 -1/d 1];

end



nn.

##### Share on other sites

I would like to be able to change the perspective view on it, be able to follow the car around. There are two views that I am very interested in: one, being able to look out the windshield and a dropped back overlook following the vehicle. Once I can do one I can do the other.

##### Share on other sites

Final project: being able to move up or down a level and around building randomly while always being tangent to the line of any function you want to give to it.

echo off
syms theta
pause on
b = -40;             % x perspective view
c =  40;             % y perspective view
d =  200;            % z perspective view

x = 0;             % x theta
z = 0;             % z theta
sx = 1;            % x scaling factor
sy = 1;            % y scaling facotr
sz = 1;            % z scaling facotr

% wxmin = -60;
% wxmax =  90;
% wymin = -10;
% wymax =  20;

wxmin = -60;
wxmax =  90;
wymin = -40;
wymax =  30;

n = 0;             % # of loops
inc5 = 1;
inc2 = 2.25;       % going forward increase
pse = .001;        % pause delay

dCar = [-6.5 -6.5 -6.5 -6.5 -2.5 -2.5 -.75 -.75 3.25 3.25 4.5 4.5 6.5 6.5 6.5 6.5;
0 0 2.5 2.5 2.5 2.5 4 4 4 4 2.5 2.5 2.5 2.5 0 0;
-2.5 2.5 2.5 -2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 -2.5 2.5 2.5 -2.5;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];

Trans = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] * dCar; % pushes DP1 off the origan

height = 5;
dBuild = [-5 5 5 -5 -5 5 5 -5; 0 0 0 0 height height height height; 0 0 10 10 0 0 10 10;
1 1 1 1 1 1 1 1];

D = zeros(64,64);

A = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1;
1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0;
0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0;
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0;
0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0;
0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0;
0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0;
0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0;
0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1;
1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0];

B = [0 1 0 1 1 0 0 0;
1 0 1 0 0 1 0 0;
0 1 0 1 0 0 1 0;
1 0 1 0 0 0 0 1;
1 0 0 0 0 1 0 1;
0 1 0 0 1 0 1 0;
0 0 1 0 0 1 0 1;
0 0 0 1 1 0 1 0];

Znew = zeros(64,88);
Znew1 = zeros(64,8);
Znew2 = zeros(64,16);
Z = zeros(8,8);
Zhorz = horzcat(Z,Z); % 8 x 16
Zvert = vertcat(Z,Z); % 16 x 8
Znew3 = zeros(16,8);
Znew4 = zeros(16,64);
Znew5 = zeros(8,64);

Z3   = horzcat(A,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Zvert,Znew4);   %16 x 16, 16 x 8, 16 x 64
Z4   = horzcat(Zhorz,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);           % 8 x 16, 8 x 8, 8 x 64
Z5   = horzcat(Zhorz,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);           % 32 x 8 3rd block of aj
Z6   = horzcat(Zhorz,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);         %32 x 8 4th block of aj
Z7   = horzcat(Zhorz,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);
Z8   = horzcat(Zhorz,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z9   = horzcat(Zhorz,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z10  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z11  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z12  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z13  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);           % 8 x 16, 8 x 8, 8 x 64
Z14  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);           % 32 x 8 3rd block of aj
Z15  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);         %32 x 8 4th block of aj
Z16  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);
Z17  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z18  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z19  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z20  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z21  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z22  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z23  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Z,Znew5);       % 16 X 8
Z24  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Z,Znew5);           % 8 x 16, 8 x 8, 8 x 64
Z25  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Z,Znew5);           % 32 x 8 3rd block of aj
Z26  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Z,Znew5);         %32 x 8 4th block of aj
Z27  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Z,Znew5);
Z28  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Z,Znew5);       % 16 X 8
Z29  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Z,Znew5);       % 16 X 8
Z30  = horzcat(Zhorz,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,B,Znew5);       % 16 X 8

Zall = vertcat(Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10,Z11,Z12,Z13,Z14,Z15,Z16,Z17,Z18,Z19,Z20,Z21,Z22,Z23,Z24,Z25,Z26,Z27,Z28,Z29,Z30);         %entire ajacinty martic

% tx1 = -30;
tx2 = 0;
tx3 = 0;
ty1 = 0;
ty2 = 0;
ty3 = 0;
% tz1 = 0;
tz2 = 0;
tz3 = 0;

% function1 = 4

array = 0;
y = pi;
row = 0;
col = .5;
sn  = 1;
dession = 0;

varx2=0;
varx3=0;
varx4=0;
varx5=0;
varx6=0;
varx8=0;
varx11=0;
varx12=0;
varx13=0;
varx14=0;
varx15=0;
varx17=0;
varx20=0;
varx21=0;
varx22=0;
varx23=0;
varx24=0;
varx26=0;
vary1=0;
vary2=0;
vary5=0;
vary6=0;
vary7=0;
vary8=0;
vary10=0;
vary11=0;
vary14=0;
vary15=0;
vary16=0;
vary17=0;
vary19=0;
vary20=0;
vary23=0;
vary24=0;
vary25=0;
vary26=0;

Y = zeros(8,8);

while n < 8
dession = randi([0,3]);

DP0 = [1 0 0          0; 0 1 0 0; 0 0 1         0; 0 0 0 1] * dBuild;
DP1 = [1 0 0          0; 0 1 0 0; 0 0 1 -40*vary1; 0 0 0 1] * dBuild;
DP2 = [1 0 0  -30*varx2; 0 1 0 0; 0 0 1 -40*vary2; 0 0 0 1] * dBuild;
DP3 = [1 0 0  -30*varx3; 0 1 0 0; 0 0 1         0; 0 0 0 1] * dBuild;
DP4 = [1 0 0   30*varx4; 0 1 0 0; 0 0 1         0; 0 0 0 1] * dBuild;
DP5 = [1 0 0   30*varx5; 0 1 0 0; 0 0 1 -40*vary5; 0 0 0 1] * dBuild;
DP6 = [1 0 0   30*varx6; 0 1 0 0; 0 0 1  40*vary6; 0 0 0 1] * dBuild;
DP7 = [1 0 0          0; 0 1 0 0; 0 0 1  40*vary7; 0 0 0 1] * dBuild;
DP8 = [1 0 0  -30*varx8; 0 1 0 0; 0 0 1  40*vary8; 0 0 0 1] * dBuild;

DP9 = [1 0 0            0; 0 1 0 10; 0 0 1          0; 0 0 0 1] * dBuild;
DP10 = [1 0 0           0; 0 1 0 10; 0 0 1 -40*vary10; 0 0 0 1] * dBuild;
DP11 = [1 0 0  -30*varx11; 0 1 0 10; 0 0 1 -40*vary11; 0 0 0 1] * dBuild;
DP12 = [1 0 0  -30*varx12; 0 1 0 10; 0 0 1          0; 0 0 0 1] * dBuild;
DP13 = [1 0 0   30*varx13; 0 1 0 10; 0 0 1          0; 0 0 0 1] * dBuild;
DP14 = [1 0 0   30*varx14; 0 1 0 10; 0 0 1 -40*vary14; 0 0 0 1] * dBuild;
DP15 = [1 0 0   30*varx15; 0 1 0 10; 0 0 1  40*vary15; 0 0 0 1] * dBuild;
DP16 = [1 0 0           0; 0 1 0 10; 0 0 1  40*vary16; 0 0 0 1] * dBuild;
DP17 = [1 0 0  -30*varx17; 0 1 0 10; 0 0 1  40*vary17; 0 0 0 1] * dBuild;

DP18 = [1 0 0           0; 0 1 0 -10; 0 0 1          0; 0 0 0 1] * dBuild;
DP19 = [1 0 0           0; 0 1 0 -10; 0 0 1 -40*vary19; 0 0 0 1] * dBuild;
DP20 = [1 0 0  -30*varx20; 0 1 0 -10; 0 0 1 -40*vary20; 0 0 0 1] * dBuild;
DP21 = [1 0 0  -30*varx21; 0 1 0 -10; 0 0 1          0; 0 0 0 1] * dBuild;
DP22 = [1 0 0   30*varx22; 0 1 0 -10; 0 0 1          0; 0 0 0 1] * dBuild;
DP23 = [1 0 0   30*varx23; 0 1 0 -10; 0 0 1 -40*vary23; 0 0 0 1] * dBuild;
DP24 = [1 0 0   30*varx24; 0 1 0 -10; 0 0 1  40*vary24; 0 0 0 1] * dBuild;
DP25 = [1 0 0           0; 0 1 0 -10; 0 0 1  40*vary25; 0 0 0 1] * dBuild;
DP26 = [1 0 0  -30*varx26; 0 1 0 -10; 0 0 1  40*vary26; 0 0 0 1] * dBuild;

Dall=horzcat(DP0, DP1, DP2,DP3,DP4,DP5,DP6,DP7,DP8,DP9,DP10,DP11,DP12,DP13,DP14,DP15,DP16,DP17,DP18,DP19,DP20,DP21,DP22,DP23,DP24,DP25,DP26);

if dession == 0
ampx = 30;
ampy = 20;
inc5 = 1;
sn  = 2;
vx =0;
vz =5;

end
if dession == 1
ampx = 15;
ampy = 20;
inc5 = 1;
sn  = 1;
vx =15;
vz =5;

end
if dession == 2
ampx = 15;
ampy = 20;
inc5 = 1;
sn  = 1;
vx =15;
vz =5;
end
if dession == 3
ampx = 15;
ampy = 20;
inc5 = 1;
sn  = 1;
vx =15;
vz =5;
end
if dession == 4
ampx = 15;
ampy = 20;

sn  = 1;
vx =15;
vz =5;
end
if dession == 5
ampx = 15;
ampy = 20;

sn  = 1;
vx =15;
vz =5;
end
if dession == 6
ampx = 15;
ampy = 20;

sn  = 1;
vx =15;
vz =5;
end
if dession == 7
ampx = 15;
ampy = 20;

sn  = 1;
vx =15;
vz =5;
end

f=[ampx*inc5*cos(theta);0;ampy*inc5*sin(sn * theta)];
velocity=diff(f,theta,1);

for newstep = 0 : pi/50 : 2*pi/1

if dession == 2
ty1 =ty1 + pi/30;
%             dession = 3;
if ty1 >= 20
ty1 = -10;
end
end
if dession == 3
ty1 =ty1 + -pi/30;
%             dession = 3;
if ty1 <= -20
ty1 = 10;
end
end
if dession == 4
inc5 = inc5 + pi/50;
end

location=subs(f,theta,newstep);
direction=subs(velocity,theta,newstep);
y = pi+ atan2(direction(3,1),direction(1,1));
tx1 = vx+location(1,1)-15;
ty1 = ty1 + location(2,1);
tz1 = vz+ location(3,1);
DP = carFunction1(x,y,z,tx1,ty1,tz1,tx2,ty2,tz2,tx3,ty3,tz3,sx,sy,sz,Trans);
carFunction6(b,c,d,pse,wxmin,wxmax,wymin,wymax,DP,Dall,Zall);
end
n = n + 1;

if dession > 4
dession = 0;
end
end
pause off


##### Share on other sites

That's... cool, I guess, but do you really need to post 8 times in a row?  The forums aren't your personal blog...

##### Share on other sites

Just showing all the things I have done with it. I guess I had a couple unnecessary posts.

If anyone would like to expand this project with my I would love to do so. I am looking to get a better view, add a graphical layer to it, add a control engine, and a physics engine to it. I love programming 3D modeling and graphics programming and am looking for someone with the same passion.

• ### What is your GameDev Story?

In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

(You must login to your GameDev.net account.)

• 14
• 14
• 45
• 22
• 27
• ### Forum Statistics

• Total Topics
634044
• Total Posts
3015213
×