dust3d/third_party/libigl/include/igl/tan_half_angle.cpp

38 lines
930 B
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2018 Alec Jacobson <alecjacobson@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.
#include "tan_half_angle.h"
#include <cmath>
template < typename Scalar>
IGL_INLINE Scalar igl::tan_half_angle(
const Scalar & a,
const Scalar & b,
const Scalar & c)
{
// .
// /|
// c/ |
// / |
// / |
// .α | a
// \ |
// \ |
// b\ |
// \|
//
// tan(α/2)
// Fisher 2007
return sqrt(((a-b+c)*(a+b-c))/((a+b+c)*(-a+b+c)));
}
#ifdef IGL_STATIC_LIBRARY
// Explicit template instantiation
// generated by autoexplicit.sh
template double igl::tan_half_angle<double>(double const&, double const&, double const&);
#endif