필터 지우기
필터 지우기

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

조회 수: 13 (최근 30일)
lil brain
lil brain 2022년 4월 15일
댓글: Les Beckham 2022년 4월 18일
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
Walter Roberson
Walter Roberson 2022년 4월 15일
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 2022년 4월 15일
편집: lil brain 2022년 4월 15일
@Walter Roberson I dont think I follow could you elaborate on that?

댓글을 달려면 로그인하십시오.

채택된 답변

Les Beckham
Les Beckham 2022년 4월 15일
편집: Les Beckham 2022년 4월 15일
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
Walter Roberson
Walter Roberson 2022년 4월 17일
"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.
Les Beckham
Les Beckham 2022년 4월 18일
Point taken. Thanks for clarifying.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by