Ball trapped inside a car

1 visualización (últimos 30 días)
Robert Mirea
Robert Mirea el 27 de Mayo de 2022
Respondida: VINAYAK LUHA el 21 de Sept. de 2023
I have a car moving forward and i ned to trap a ball inside it.
x_casa = [2,12,12,7,2];
y_casa = [1,1,10,14,10]; %obiectul casa
casa = hgtransform;
patch('XData',x_casa,'YData',y_casa,'FaceColor','white','Parent',casa)
x_drum=[2,2 , 100 , 100 ];
y_drum=[1, 1.2 , 1.2 ,1]; %obiectul drum
drum = hgtransform;
patch('XData',x_drum,'YData',y_drum,'FaceColor','black','Parent',drum)
roata_spate = hgtransform; %back wheel
theta = 0:0.1:2*pi;
rad=0.3;
xCent = 13.5;
yCent = 1.3;
xCoord = xCent+rad*cos(theta);
yCoord = yCent+rad*sin(theta);
patch('XData',xCoord,'YData',yCoord,'FaceColor','blue','Parent',roata_spate)
roata_fata = hgtransform; %front wheel
theta = 0:0.1:2*pi;
rad=0.3;
xCent2 = 16;
yCent2 = 1.3;
xCoord2 = xCent2+rad*cos(theta);
yCoord2 = yCent2+rad*sin(theta);
patch('XData',xCoord2,'YData',yCoord2,'FaceColor','blue','Parent',roata_fata)
x_sasiu = [12.5, 17.5, 17.5, 15.5, 12.5, 12.3]; % car chassis
y_sasiu = [1.6, 1.6, 3, 4 , 4 , 1.6];
sasiu = hgtransform;
patch('XData',x_sasiu,'YData',y_sasiu,'FaceColor','white','Parent',sasiu)
ball = hgtransform; %ball
theta = 0:0.1:2*pi;
rad=1;
xCent3 = 15;
yCent3 = 2.7;
xCoord3 = xCent3+rad*cos(theta);
yCoord3 = yCent3+rad*sin(theta);
patch('XData',xCoord3,'YData',yCoord3,'FaceColor','red','Parent',ball)
axis equal
xlim([0 100])
ylim([0 30])
pt1 = [0 0 0];
pt2 = [80 0 0];
for t=linspace(0,1,2500) %making the car moving forward
sasiu.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
roata_fata.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
roata_spate.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
drawnow
end
  3 comentarios
Walter Roberson
Walter Roberson el 29 de Mayo de 2022
Instead of having the ball have independent coordinates, parent it to the car, so that when the car moves it automatically moves as well. The coordinates of the ball at any time should be the position of the ball relative to some reference point inside the car.
It is legal to have one hgtransform be parented to another.
Robert Mirea
Robert Mirea el 30 de Mayo de 2022
and how shoul i do independent coordinates for the car ? i am pretty new to the coding an i don't know how to do that.

Iniciar sesión para comentar.

Respuestas (1)

VINAYAK LUHA
VINAYAK LUHA el 21 de Sept. de 2023
Hi Robert Mirea,
It is my understanding that you would like to have the ball trapped inside the car such that it moves along with the latter.
Here’s a workaround in which the ball.matrix transformation is updated using the same translation transformation applied to the car chassis. This ensures that the ball remains trapped inside the car as it moves forward. I’ve also updated the yCoord3” variable such that the ball fits inside the car.
Here’s the modified code for your reference-
x_casa = [2,12,12,7,2];
y_casa = [1,1,10,14,10]; %obiectul casa
casa = hgtransform;
patch('XData',x_casa,'YData',y_casa,'FaceColor','white','Parent',casa)
x_drum=[2,2 , 100 , 100 ];
y_drum=[1, 1.2 , 1.2 ,1]; %obiectul drum
drum = hgtransform;
patch('XData',x_drum,'YData',y_drum,'FaceColor','black','Parent',drum)
roata_spate = hgtransform; %back wheel
theta = 0:0.1:2*pi;
rad=0.3;
xCent = 13.5;
yCent = 1.3;
xCoord = xCent+rad*cos(theta);
yCoord = yCent+rad*sin(theta);
patch('XData',xCoord,'YData',yCoord,'FaceColor','blue','Parent',roata_spate)
roata_fata = hgtransform; %front wheel
theta = 0:0.1:2*pi;
rad=0.3;
xCent2 = 16;
yCent2 = 1.3;
xCoord2 = xCent2+rad*cos(theta);
yCoord2 = yCent2+rad*sin(theta);
patch('XData',xCoord2,'YData',yCoord2,'FaceColor','blue','Parent',roata_fata)
x_sasiu = [12.5, 17.5, 17.5, 15.5, 12.5, 12.3]; % car chassis
y_sasiu = [1.6, 1.6, 3, 4 , 4 , 1.6];
sasiu = hgtransform;
patch('XData',x_sasiu,'YData',y_sasiu,'FaceColor','white','Parent',sasiu)
ball = hgtransform; %ball
theta = 0:0.1:2*pi;
rad=1;
xCent3 = 15;
yCent3 = 2.7;
xCoord3 = xCent3+rad*cos(theta);
yCoord3 = yCent3+rad*sin(theta);
patch('XData',xCoord3,'YData',yCoord3-2.5,'FaceColor','red','Parent',ball)
axis equal
xlim([0 100])
ylim([0 30])
pt1 = [0 0 0];
pt2 = [80 0 0];
for t=linspace(0,1,2500) %making the car moving forward
sasiu.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
roata_fata.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
roata_spate.Matrix = makehgtform('translate',pt1 + t*(pt2-pt1));
%%Update the position of the ball relative to the car
ball.Matrix = makehgtform('translate',[pt1(1) + t*(pt2(1)-pt1(1)), yCent3, 0]);
drawnow
end
Regards
Vinayak Luha

Categorías

Más información sobre Object Containers 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!

Translated by