# Area calculation of circle projection on cylindric surface

12 views (last 30 days)
Julian Zettl on 17 Feb 2021
Commented: Just Manuel on 23 Feb 2021
Hello,
i have a very basic problem that is not necessarily a matlab issue, but i figured since i need matlab to calculate a series of these areas at different conditions i might as well post it here....
I want to calculate the area shown in the picture in dependence of r1, r2 and x (r=radius, x=distance between cylinder axes).
Just Manuel on 17 Feb 2021
Edited: Just Manuel on 17 Feb 2021
Not a complete solution, but an Idea, what you colud do:
You can try going down the infinitesimal road.
Try calculating the area piecewise by going in dx pieces from x-r2 to x+r2. unfold the cylinder c1, calculate the equivalent of dx on the surface of c1, multiply by the width of the circle c2 at the position and then sum up those pieces.
you can have a numeric solution by making dx smaller and smaller, until you have a desired accuracy, or maybe you will find an analytic solution when formulating your sum.
Cheers
Manuel

darova on 17 Feb 2021
Here is an example (not tested)
clc,clear
R = 3;
r = 1;
t = linspace(0,2*pi-0.1,30); % unclosed contour
[x,y] = pol2cart(t,r);
x = x+1;
z = sqrt(R^2-x.^2); % find Z coordinate
gd = [2;length(x);x(:);y(:)]; % geometry description
dl = decsg(gd); % decomposition
[p,e,t] = initmesh(dl); % triangulation
p(:,3) = sqrt(R^2-p(:,1).^2);
% create structure for visualization
pp1.faces = t(1:3,:)';
pp1.vertices = p;
pp1.facecolor = 'green';
plot3(x,y,z)
patch(pp1)
view(45,45)
note: contour for decsg should NOT be closed
##### 3 CommentsShow 1 older commentHide 1 older comment
darova on 18 Feb 2021
If your contour is always that simple
clc,clear
R = 3;
r = 1;
t = linspace(0,2*pi,30);
[x,y] = pol2cart(t,r);
x = [0*x; 3*x; 5*x; 7*x; 10*x]/10;
y = [0*y; 3*y; 5*y; 7*y; 10*y]/10;
x = x+1;
z = sqrt(R^2-x.^2);
h = surf(x,y,z);
h1 = surf2patch(h,'triangles'); % convert to triangles
view(35,15)
darova on 18 Feb 2021

Just Manuel on 23 Feb 2021
Edited: Just Manuel on 23 Feb 2021
I followed through the Idea I gave you in the comment:
Try calculating the area piecewise by going in dx pieces from x-r2 to x+r2. unfold the cylinder c1, calculate the equivalent of dx on the surface of c1, multiply by the width of the circle c2 at the position and then sum up those pieces.
This gives actually some happy and short code:
% I renamed the x in your picture to x0, so as to have x as the integration variable
% witdh of c2 at position
% use pythagoras to get the other circle coordinate, then double it
w = @(x) sqrt(r2^2 - (x - x0).^2) .* 2;
% unfolded length is the infinitesimal dx multiplied by
% a factor depending on the slope of c1
% use some geometry to find the factor:
% you can see that n/r1 = dx/d and n = sqrt(r1^2 - (x-x0)^2)
% so you end up with
d = @(x) r1 ./ sqrt(r1.^2 - x.^2);
% so the function to integrate is
f = @(x) w(x) .* d(x);
% so the area is that integral within the boundaries of x0-r2 and x1+r2
A = integral(f, x0-r2, x0+r2);
It even has better precision than the graphical approach :)
try r1 = 1e100, r2 = sqrt(1/pi) and x0 = 0
the numerical approach yields 1.0000...
while the graphical approach yields 0.9972...
For an analytical (closed form) solution, you'd have to solve the integral. I made a short attempt, but it seems to me, that this integral has no closed form. (Prove me wrong, I'd be happy to see one :) )
Cheers
Manuel
darova on 23 Feb 2021
Just Manuel on 23 Feb 2021
nice!
There are always multiple approaches. I also did one integrrating over the angle on r1, but in the end, i thought the solution over dx more straightforward. anywho, if you prefer the angle, you can also do
which produces the same results.
It also seems somewhat nicer, as the integration variable only appears once. However, also this variant does not seem to have a closed form solution.
Cheers
Manuel

### Categories

Find more on Geometry and Mesh in Help Center and File Exchange

R2020a

### Community Treasure Hunt

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

Start Hunting!