This method is based on the article Deriving the Pythagorean Triplets.
Using a similar approach, we can find the solutions are corresponding to all the rational points on the curve $x^2 + 3y^2=1$, i.e. solutions to $$\left\{\begin{align}y&=k(x+1)\\1&=x^2+3y^2\end{align}\right.$$
or $$x^2 + 3(k(x+1))^2 = 1 \implies (3k^2+1)x^2 + 6k^x + (3k^2-1)=0$$
As one solution to the above quadrantic equation is $x=-1$, applying the Vieta theorm gives another root at $$x=\frac{1-3k^2}{1+3k^2}\implies y=k(x+1)=\frac{2k}{1+3k^2}\implies (x,y)=\left(\frac{1-3k^2}{1+3k^2}, \frac{2k}{1+3k^2}\right)$$
It follows that $$(a, b, c) = \left((1-3k^2)p^2, 2kp^2, (1+3k^2)p^2\right)$$
where integer $p$ is a scaling parameters. Letting $q=pk$ gives the final solution:$$(a, b, c) = \left(p^2-3q^2, 2pq, p^2 + 3q^2\right)$$
It can be shown that in order to make the solution primitive (meaning $a, b, c$ are relatively co-prime), $p$ and $q$ must be co-prime and cannot be both odd.