In an affine space there's the concept of affine combination which states that any point in space can be represented as a affine combination in the form

\[ a + \sum_{i \in I} \lambda_i \mathbf{aa_i} \quad \quad \text{if $\sum_{i \in I} \lambda_i = 1$} \]

We can add an additional restriction on the values of \(\lambda_i\) to define a triangle built out of three points, if \(\lambda_1 = \beta, \lambda_2 = \gamma\), \(\beta + \gamma = 1\) and \(\beta, \gamma \in [0,1]\) then a triangle is defined as the affine combination

\[ a + \beta \mathbf{ab} + \gamma \mathbf{ac} \]

barycentric coordinates

barycentric coordinates

One geometric property of the scalar values is that they're the signed scaled distance from the lines that pass through the triangle sides, to compute the scalar values \(\beta\) and \(\gamma\) we can use the fact that when the implicit equation of the line that pass through a side is evaluated with points that don't lie on the line the result is equal to

beta

beta

\[ f(x,y) = d_{(x,y)} \cdot \sqrt{A^2 + B^2} \]

Where \(d_{(x,y)}\) is the distance from the point \((x,y)\) to the line, \(A\) and \(B\) are the coefficients of \(x\) and \(y\) of the general equation of the line that passes through \(a\) and \(c\)

\[ Ax + Bx + C = 0 \]

To find the value of \(\beta\) we can use the value of the implicit equation of the line to map the distance between any point to the line in the range \([f_{ac}(x_a, y_a), f_{ac}(x_b, y_b)] = [0, f_{ac}(x_b, y_b)]\), we can use a simple division to find the value of \(\beta\)

\[ \beta = \frac{f_{ac}(x,y)}{f_{ac}(x_b, y_b)} = \frac{d_{(x,y)}}{d_{(x_b, y_b)}} \]

In a similar fashion the value of \(\gamma\) is

\[ \gamma = \frac{f_{ab}(x,y)}{f_{ab}(x_c, y_c)} = \frac{d_{(x,y)}}{d_{(x_c, y_c)}} \]


References
  • Shirley, P. and Ashikhmin, M. (2005). Fundamentals of computer graphics. Wellesley, Mass.: AK Peters.