3
$\begingroup$

I would like to find the area of a surface spanned by two parametric curves in 3D. I came up with this metric for distance between curves.

The illustrations are in 2D for simplicity.

curveA[t_] := {0, 4} + t {3, -4}
curveB[t_] := {8, 2} + t {0, -2}
curveC[t_] := {2, 2} + t {0, -2}

Show[{ParametricPlot[{curveA[t], curveB[t]}, {t, 0, 1}, 
   PlotStyle -> {Directive[{Red, Thickness[0.01]}]}], 
  Graphics[{EdgeForm[None], FaceForm[Lighter[Blue]], 
    Polygon[{{0, 4}, {3, 0}, {8, 0}, {8, 2}}]}]}, Axes -> True]
Show[{ParametricPlot[{curveA[t], curveC[t]}, {t, 0, 1}, 
   PlotStyle -> {Directive[{Red, Thickness[0.01]}]}], 
  Graphics[{EdgeForm[None], FaceForm[Lighter[Blue]], 
    Polygon[{{0, 4}, {2, 2}, {2, 0}, {3, 0}}]}]}, Axes -> True]

area of interest

The areas are 18 and 4/3, repectively, if I am not mistaken.

A more general 3D non-intersecting case.

area of interest

The "orientation" of the curves are the same, but they can intersect each other. Thank you very much!

PS: If this issue is more appropriate in the math stack exchange hub, please move this thread.

$\endgroup$
  • $\begingroup$ In the second 2D example the area is 5/3 since the intersection point doesn't correspond to the same parameter on the 2 lines - so the drawing is misleading as well. Thanks nikie! $\endgroup$ – Toorop Aug 31 '15 at 14:05
3
$\begingroup$

If we define the 2d cross product like this:

cross2d[a_, b_] := a.{{0, 1}, {-1, 0}}.b

I think it's just:

Integrate[(Abs[cross2d[curveA'[t], curveB[t] - curveA[t]]] + 
    Abs[cross2d[curveB'[t], curveB[t] - curveA[t]]])/2, {t, 0, 1}]

Where the idea is that cross[curveA[t]-curveA[t+d], curveB[t] - curveA[t]]/2 is the area of the triangle {curveA[t], curveA[t+d], curveB[t]}. Add the area of the triangle {curveA[t], curveB[t+d], curveB[t]}, and you get the area of the quad {curveA[t], curveA[t+d], curveB[t+d]}, curveB[t]}.

enter image description here

Let d go to 0, and you get the integral above.

for a pair of 3d curves, it would be:

Integrate[(Norm[Cross[curveA'[t], curveB[t] - curveA[t]]] + 
    Norm[Cross[curveB'[t], curveB[t] - curveA[t]]])/2, {t, 0, 1}]
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.