Need help validating curvature of an arc which has XYZ points
4 views (last 30 days)
Show older comments
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?
0 Comments
Answers (1)
Abhishek Chakram
on 24 Apr 2024
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)]);
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
0 Comments
See Also
Categories
Find more on Biotech and Pharmaceutical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!