# how to calculate area of 3D triangle?

I have coordinates of 3d triangle and I need to calculate its area. I know how to do it in 2D, but don't know how to calculate area in 3d. I have developed data as follows.

(119.91227722167969, 122.7717056274414, 39.3568115234375),
(119.8951187133789, 122.7717056274414, 39.38057327270508),
(121.11941528320312, 123.2818832397461, 38.41301345825195)

-

Say you have 3 points $\mathbf{A, B, C}$. Find the angle between $\mathbf{AB}$ and $\mathbf{AC}$ using dot product (i.e. $\mathbf{AB}\cdot\mathbf{AC}=|\mathbf{AB}||\mathbf{AC}|\cos\theta$) and then you can find the area of the triangle using $$A=\frac{1}{2}|\mathbf{AB}||\mathbf{AC}|\sin\theta$$

-
What is theta in this equation? – jjxtra Feb 24 at 3:04

If your 3 points are A, B, C then you may use directly the (half) cross product formula : $$S=\dfrac{|\mathbf{AB}\times\mathbf{AC}|}2=\dfrac{|\mathbf{AB}||\mathbf{AC}||\sin(\theta)|}2$$ that is (see the Wikipedia link to get the cross-product in $\mathbb{R}^3$) : $$S=\frac 12 \sqrt{(x_2\cdot y_3-x_3\cdot y_2)^2+(x_3\cdot y_1-x_1\cdot y_3)^2+(x_1\cdot y_2-x_2\cdot y_1)^2}$$ if $\mathbf{AB}=(x_1,x_2,x_3)$ and $\mathbf{AC}=(y_1,y_2,y_3)$

-

Heron's formula is easiest as it "requires no arbitrary choice of side as base or vertex as origin, contrary to other formulas for the area of a triangle:" $$A = \sqrt{s(s-a)(s-b)(s-c)}$$ where $s=p/2$ is half of the perimeter $p=a+b+c$ (called the semiperimeter of the triangle). The triangle side lengths can be obtained via vector norm of relative positions: $$a=\|\vec{r}_1-\vec{r}_2\|$$ $$b=\|\vec{r}_2-\vec{r}_3\|$$ $$c=\|\vec{r}_3-\vec{r}_1\|$$

-
However, a naive application of Heron's formula can be numerically disastrous, especially if the triangles in question are slivers. See this note by Velvel Kahan. – J. M. Jun 9 at 22:28
Quoting Khan: "These formulas’ defects afflict only extreme configurations: The triangle is too nearly degenerate — too needle-like." – Felipe G. Nievinski Jun 11 at 1:49

If you have 3 coordinates in 3D $(x_1,y_1,z_1);(x_2,y_2,z_2);(x_3,y_3,z_3)$ make two coterminous vectors like $\vec a=(x_2-x_1)I+(y_2-y_1)j+(z_2-z_1)k$ $\vec b=(x_3-x_1)I+(y_3-y_1)j+(z_3-z_1)k$ now find vector product of $\vec a$ and $\vec b$ and area of triangle formed will be $\frac{1}{2} \| \vec a \times \vec b \|$. You are with your desired answer.

-
awesome it has cleared up my douts. – lalit arora Nov 4 '13 at 8:49
NOTE: This is the least-expensive formula to compute, as it does not require square root, nor trigonometric calculation. The main computation work is the cross product, which only uses multiplies and add/subtract. EDIT No I'm wrong, in 3D must take MAGNITUDE of cross-product, which requires a SQUARE-ROOT. So Raymond Manzoni's answer is about the same cost. – ToolmakerSteve Mar 28 '14 at 3:33
$\frac12\vec a\times \vec b$ is a vector, but area isn't. You must write $\frac12|\vec a\times \vec b|$ – Mathematician171 Jan 16 '15 at 16:44

Alternatively, if you want to compute the area in an arbitrary dimension, and have computed dot products between all the points, $a$, $b$ and $c$, you can calculate the area in a way which requires no arbitrary choice of point and only requires one square root, unlike the other formulas:

$$\frac{1}{2}\sqrt{2\left(ab\cdot ac+ab\cdot bc+ac\cdot bc-ac\cdot bb-aa\cdot bc-ab\cdot cc\right)+aa\cdot cc+bb\cdot cc+aa\cdot bb-ab^2-ac^2-bc^2}$$

Where $ab\rightarrow dot\left(a,b\right)$

Compute half the distance from a to b, and multiply it by the distance from c to the closest point to c on the ray from a to b.

-

Use python.

def heron(a,b,c):
s = (a + b + c) / 2
area = (s*(s-a) * (s-b)*(s-c)) ** 0.5
return area

def distance3d(x1,y1,z1,x2,y2,z2):
a=(x1-x2)**2+(y1-y2)**2 + (z1-z2)**2 d= a ** 0.5
return d

def areatriangle3d(x1,y1,z1,x2,y2,z2,x3,y3,z3):
a=distance3d(x1,y1,z1,x2,y2,z2)
b=distance3d(x2,y2,z2,x3,y3,z3)
c=distance3d(x3,y3,z3,x1,y1,z1)
A = heron(a,b,c)
print("area of triangle is %r " %A)

Now call the function areatriangle3d(inputs).
Alternatively you can add a prompt to enter the values.

For the original problem above, I get an approximate area of 0.0097413991 which is about 0.01 square units.

-
I don't think specifying a programming language is what the OP was looking for as an answer, though of course any three points will form a triangle (unless they are all in a line, a degenerate case), and the invocation of Heron's rule is in line with other answers. – hardmath Dec 10 '15 at 0:05
If the OP wishes I can delete this. I was just trying to show the OP a way to implement it. – john Dec 10 '15 at 6:36

You have three points $\mathbf {A,B,C}$ then you can use the dot product so the area of the triangle is:

$S = \frac{1}{2} \sqrt {|AB|²|AC|²-(\mathbf {AB}\cdot\mathbf {AC})}$

-