How do I calculate the acceleration using only 3D distances?

16 Ansichten (letzte 30 Tage)
Hi,
I have a list of distances in each cell of acc_dist . The first three columns in each cell are xyz coordinates. So column one are all x, column two are all y, and column three are all z. The rows are the coordinate points measured at a speed of 72 Hz.
I am trying to compute the acceleration of these coordinate points by first calculating the 3D euclidean distance between each point and the adjacent point like so:
sqrt((x2-x1).^2+(y2-y1).^2+(z2-z1).^2)
And then I am trying to use the acceleration formula like so:
acceleration = dv/dt
dv = change in velocity
dt = change in time
How would I go about calculating the acceleration for the entire length of each list?
Thank you!
  4 Kommentare
Walter Roberson
Walter Roberson am 15 Apr. 2022
Use gradient() twice.
However... acceleration is a signed vector quantity, derived from velocity which is a signed vector quantity. This is a problem for you because sqrt((x2-x1).^2+(y2-y1).^2+(z2-z1).^2) is not signed and not a vector. You are calculating speed, not velocity.
lil brain
lil brain am 15 Apr. 2022
Bearbeitet: lil brain am 15 Apr. 2022
@Walter Roberson I dont think I follow could you elaborate on that?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Les Beckham
Les Beckham am 15 Apr. 2022
Bearbeitet: Les Beckham am 15 Apr. 2022
load acc_dist.mat
xyz = cell_of_double_pre_ballsCopy{1};
dxyz = diff(xyz); % difference between adjacent points in xyz coordinates
v = sqrt(dxyz(:,1).^2 + dxyz(:,2).^2 + dxyz(:,3).^2) * 72;
a = gradient(v, 1/72);
t = 0:1/72:(length(a)-1)/72;
plot(t,v)
plot(t,a)
  13 Kommentare
Walter Roberson
Walter Roberson am 17 Apr. 2022
"Apply this function to every element of this array" is one of the fundamental array operations in theory.
Consider for example,
A = [1 3 5]
A = 1×3
1 3 5
B = A.^2
B = 1×3
1 9 25
From a theoretical perspective, this is not "squaring the vector": from a theoretical perspective, it is "Apply the function x->x^2 to each element of A, returning an array of the results.
This is frequenty called the "map" operation. And having a brief call that says that you are mapping a function over all of the elements of an array, is often significantly clearer than using a for loop.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by