필터 지우기
필터 지우기

Need help validating curvature of an arc which has XYZ points

조회 수: 6 (최근 30일)
Sanam Pun
Sanam Pun 2024년 2월 22일
답변: Abhishek Chakram 2024년 4월 24일
Hi,
I have a composite plate that has curved due to thermal stress. This was modelled in Abaqus, and I have created an ouput of nodal displacement in xyz coordinates. I have managed to find the radius/curvature but it seems way too high (for ref I'm using this for calculation).
Of course my model itself could be wrong, but I just wanted to validate if someone here could use xyz points from my script and calculate their own radius?

답변 (1개)

Abhishek Chakram
Abhishek Chakram 2024년 4월 24일
Hi Sanam Pun,
It appears to me that you want to validate the radius of curvature that you found. Based on your method, the mean of radius of curvature comes out to be 632.3387.
I followed a different approach to calculate the radius and found the mean to be 648.4765. Since the difference is less, I believe that the instructions you were referring is also correct. Here is the code for my approach:
% Given data
x = [13.7882, 30.9447, 48.5305, 66.4905, 84.7921, 103.41, 122.317, 141.485, 160.882, 180.471, 200.216, 220.079, 240.02, 260, 279.98, 299.921, 319.784, 339.529, 359.118, 378.515, 397.683, 416.59, 435.208, 453.509, 471.469, 489.055, 506.212];
y = [0.00333052, 0.0117478, 0.0117075, 0.0102405, 0.00887592, 0.00792976, 0.0074076, 0.00721893, 0.00724844, 0.00739001, 0.00756238, 0.00771254, 0.00781127, 0.00784552, 0.0078118, 0.0077136, 0.00756396, 0.0073921, 0.00725103, 0.00722202, 0.00741118, 0.0079338, 0.00888042, 0.0102455, 0.0117129, 0.0117535, 0.00333664];
z = [32.5773, 25.6187, 19.125, 13.0944, 7.54374, 2.49851, -2.01452, -5.97057, -9.34853, -12.1315, -14.3071, -15.8664, -16.8039, -17.1168, -16.804, -15.8664, -14.3071, -12.1316, -9.34863, -5.97069, -2.01466, 2.49835, 7.54356, 13.0942, 19.1248, 25.6185, 32.5771];
% Calculate the derivatives using finite differences
dx = gradient(x);
dy = gradient(y);
dz = gradient(z);
ddx = gradient(dx);
ddy = gradient(dy);
ddz = gradient(dz);
% Calculate the curvature
numerator = sqrt((dy .* ddz - ddy .* dz).^2 + (dz .* ddx - ddz .* dx).^2 + (dx .* ddy - ddx .* dy).^2);
denominator = (dx.^2 + dy.^2 + dz.^2).^(3/2);
kappa = numerator ./ denominator;
% Calculate the radius of curvature
radius_of_curvature = 1 ./ kappa;
% Removed 1st and last value to compare
% both the means as your approach returned NaN
% values in 1st and last position
radius_of_curvature = radius_of_curvature(:,2:end-1);
mean_radius_of_curvature = mean(radius_of_curvature);
disp(['Mean Radius of Curvature: ', num2str(mean_radius_of_curvature)]);
Mean Radius of Curvature: 648.4765
This code calculates the derivatives using finite differences and then applies the curvature formula for a 3D curve. It calculates the curvature at each point along the curve defined by the x, y, and z data points. It then computes the radius of curvature as the inverse of the curvature. The mean radius of curvature is also calculated and displayed.
Best Regards,
Abhishek Chakram

카테고리

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

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by