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

38 lines
930 B
C++
Raw Normal View History

// 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