~ubuntu-branches/debian/stretch/cgal/stretch

« back to all changes in this revision

Viewing changes to demo/CGAL_ipelets/include/CGAL_ipelets/pencils.h

  • Committer: Package Import Robot
  • Author(s): Joachim Reichel
  • Date: 2014-04-05 10:56:43 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20140405105643-jgnrpu2thtx23zfs
Tags: 4.4-1
* New upstream release.
* Remove patches do-not-link-example-with-qt4-support-library.patch and
  fix_jet_fitting_3.patch (applied upstream).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) 2013  INRIA Sophia-Antipolis (France).
 
2
// All rights reserved.
 
3
//
 
4
// This file is part of CGAL (www.cgal.org); you can redistribute it and/or
 
5
// modify it under the terms of the GNU Lesser General Public License as
 
6
// published by the Free Software Foundation; either version 3 of the License,
 
7
// or (at your option) any later version.
 
8
//
 
9
// Licensees holding a valid commercial license may use this file in
 
10
// accordance with the commercial license agreement provided with the software.
 
11
//
 
12
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
13
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
14
//
 
15
// $URL$
 
16
// $Id$
 
17
// 
 
18
//
 
19
// Author(s)     : Olivier Devillers
 
20
 
 
21
 
 
22
template<class Kernel>
 
23
typename Kernel::Circle_2
 
24
compute_circle_in_pencil(typename Kernel::Circle_2 c,typename Kernel::Circle_2 c1,typename Kernel::Circle_2 c2)
 
25
{
 
26
  typename Kernel::Point_2 origin=CGAL::ORIGIN;
 
27
  typename Kernel::FT lambda = CGAL::squared_distance(c.center(),origin) ;
 
28
  lambda -= c.squared_radius() ;
 
29
  typename Kernel::FT l1 = CGAL::squared_distance(c1.center(),origin) - c1.squared_radius() ;
 
30
  typename Kernel::FT l2 = CGAL::squared_distance(c2.center(),origin) - c2.squared_radius() ;
 
31
  l1 += -2*((c1.center()-origin)*(c.center()-origin));
 
32
  l2 += -2*((c2.center()-origin)*(c.center()-origin));
 
33
  lambda= - (lambda+l2)/(l1-l2);
 
34
  typename Kernel::Point_2 center=origin+lambda*(c1.center()-origin)+(1-lambda)*(c2.center()-origin);
 
35
  typename Kernel::FT sqradius=-    lambda*(CGAL::squared_distance(c1.center(),origin)-c1.squared_radius())
 
36
    -(1-lambda)*(CGAL::squared_distance(c2.center(),origin)-c2.squared_radius())
 
37
    +CGAL::squared_distance(center,origin);
 
38
  typename Kernel::Circle_2 circ(center,sqradius);
 
39
  return circ;
 
40
}
 
41
 
 
42
 
 
43
template<class Kernel>
 
44
typename Kernel::Circle_2
 
45
compute_circle_orthogonal(typename Kernel::Circle_2 c,typename Kernel::Circle_2 c1,typename Kernel::Circle_2 c2)
 
46
{
 
47
  typename Kernel::Point_2 origin=CGAL::ORIGIN;
 
48
  typename Kernel::FT z= CGAL::squared_distance(c.center(),origin)-c.squared_radius();
 
49
  typename Kernel::FT z1= CGAL::squared_distance(c1.center(),origin)-c1.squared_radius();
 
50
  typename Kernel::FT z2= CGAL::squared_distance(c2.center(),origin)-c2.squared_radius();
 
51
  typename Kernel::FT det=-(c1.center().x() * c2.center().y() - c1.center().y() * c2.center().x())
 
52
                          +(c.center().x() * c2.center().y() - c.center().y() * c2.center().x())
 
53
                          -(c.center().x() * c1.center().y() - c.center().y() * c1.center().x());
 
54
  typename Kernel::FT x=(  -(z1 * c2.center().y() - c1.center().y() * z2)
 
55
                        +(z * c2.center().y() - c.center().y() * z2)
 
56
                        -(z * c1.center().y() - c.center().y() * z1))/2/det;
 
57
  typename Kernel::FT y=(  -(c1.center().x() * z2 - z1 * c2.center().x())
 
58
                        +(c.center().x() * z2 - z * c2.center().x())
 
59
                        -(c.center().x() * z1 - z * c1.center().x()))/2/det;
 
60
  typename Kernel::FT rr=-(  (c1.center().x() * c2.center().y() - c1.center().y() * c2.center().x())*z
 
61
                         -(c.center().x() * c2.center().y() - c.center().y() * c2.center().x())*z1
 
62
                         +(c.center().x() * c1.center().y() - c.center().y() * c1.center().x())*z2)/det+x*x+y*y;
 
63
  typename Kernel::Point_2 center(x,y);
 
64
  typename Kernel::Circle_2 circ(center,rr);
 
65
  return circ;
 
66
}