BWAPI
|
00001 // Copyright (c) 2003-2004 Utrecht University (The Netherlands), 00002 // ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany), 00003 // INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg 00004 // (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria), 00005 // and Tel-Aviv University (Israel). All rights reserved. 00006 // 00007 // This file is part of CGAL (www.cgal.org); you can redistribute it and/or 00008 // modify it under the terms of the GNU Lesser General Public License as 00009 // published by the Free Software Foundation; version 2.1 of the License. 00010 // See the file LICENSE.LGPL distributed with CGAL. 00011 // 00012 // Licensees holding a valid commercial license may use this file in 00013 // accordance with the commercial license agreement provided with the software. 00014 // 00015 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 // 00018 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/Kernel_23/include/CGAL/Kernel/global_functions_internal_2.h $ 00019 // $Id: global_functions_internal_2.h 50420 2009-07-07 10:33:38Z afabri $ 00020 // 00021 // 00022 // Author(s) : Sylvain Pion 00023 00024 #ifndef CGAL_KERNEL_GLOBAL_FUNCTIONS_INTERNAL_2_H 00025 #define CGAL_KERNEL_GLOBAL_FUNCTIONS_INTERNAL_2_H 00026 00027 // Generic functions calling the kernel functor, taking the kernel as 00028 // parameter. 00029 00030 // These functions are not documented for now, but could be as some point. 00031 00032 #include <CGAL/basic.h> 00033 00034 CGAL_BEGIN_NAMESPACE 00035 00036 namespace CGALi { 00037 00038 template < class K > 00039 inline 00040 typename K::Angle 00041 angle(const typename K::Point_2 &p, 00042 const typename K::Point_2 &q, 00043 const typename K::Point_2 &r, const K& k) 00044 { 00045 return k.angle_2_object()(p, q, r); 00046 } 00047 00048 template < class K > 00049 inline 00050 typename K::Boolean 00051 are_ordered_along_line(const typename K::Point_2 &p, 00052 const typename K::Point_2 &q, 00053 const typename K::Point_2 &r, const K& k) 00054 { 00055 return k.are_ordered_along_line_2_object()(p, q, r); 00056 } 00057 00058 template < class K > 00059 inline 00060 typename K::Boolean 00061 are_strictly_ordered_along_line(const typename K::Point_2 &p, 00062 const typename K::Point_2 &q, 00063 const typename K::Point_2 &r, 00064 const K& k) 00065 { 00066 return k.are_strictly_ordered_along_line_2_object()(p, q, r); 00067 } 00068 00069 template < class K > 00070 inline 00071 typename K::FT 00072 area(const typename K::Point_2 &p, 00073 const typename K::Point_2 &q, 00074 const typename K::Point_2 &r, 00075 const K& k) 00076 { 00077 return k.compute_area_2_object()(p, q, r); 00078 } 00079 00080 template < class K > 00081 inline 00082 typename K::Point_2 00083 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00084 const typename K::Point_2 &p2, const K& k) 00085 { 00086 return k.construct_barycenter_2_object()(p1, w1, p2); 00087 } 00088 00089 template < class K > 00090 inline 00091 typename K::Point_2 00092 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00093 const typename K::Point_2 &p2, const typename K::FT& w2, const K& k) 00094 { 00095 return k.construct_barycenter_2_object()(p1, w1, p2, w2); 00096 } 00097 00098 template < class K > 00099 inline 00100 typename K::Point_2 00101 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00102 const typename K::Point_2 &p2, const typename K::FT& w2, 00103 const typename K::Point_2 &p3, const K& k) 00104 { 00105 return k.construct_barycenter_2_object()(p1, w1, p2, w2, p3); 00106 } 00107 00108 template < class K > 00109 inline 00110 typename K::Point_2 00111 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00112 const typename K::Point_2 &p2, const typename K::FT& w2, 00113 const typename K::Point_2 &p3, const typename K::FT& w3, const K& k) 00114 { 00115 return k.construct_barycenter_2_object()(p1, w1, p2, w2, p3, w3); 00116 } 00117 00118 template < class K > 00119 inline 00120 typename K::Point_2 00121 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00122 const typename K::Point_2 &p2, const typename K::FT& w2, 00123 const typename K::Point_2 &p3, const typename K::FT& w3, 00124 const typename K::Point_2 &p4, const K& k) 00125 { 00126 return k.construct_barycenter_2_object()(p1, w1, p2, w2, p3, w3, p4); 00127 } 00128 00129 template < class K > 00130 inline 00131 typename K::Point_2 00132 barycenter(const typename K::Point_2 &p1, const typename K::FT& w1, 00133 const typename K::Point_2 &p2, const typename K::FT& w2, 00134 const typename K::Point_2 &p3, const typename K::FT& w3, 00135 const typename K::Point_2 &p4, const typename K::FT& w4, const K& k) 00136 { 00137 return k.construct_barycenter_2_object()(p1, w1, p2, w2, p3, w3, p4, w4); 00138 } 00139 00140 template <typename K> 00141 inline 00142 typename K::Line_2 00143 bisector(const typename K::Point_2 &p, 00144 const typename K::Point_2 &q, const K &k) 00145 { 00146 return k.construct_bisector_2_object()(p, q); 00147 } 00148 00149 template <typename K> 00150 inline 00151 typename K::Line_2 00152 bisector(const typename K::Line_2 &l1, 00153 const typename K::Line_2 &l2, const K &k) 00154 { 00155 return k.construct_bisector_2_object()(l1, l2); 00156 } 00157 00158 template < class K > 00159 inline 00160 typename K::Point_2 00161 centroid(const typename K::Point_2 &p, 00162 const typename K::Point_2 &q, 00163 const typename K::Point_2 &r, const K& k) 00164 { 00165 return k.construct_centroid_2_object()(p, q, r); 00166 } 00167 00168 template < class K > 00169 inline 00170 typename K::Point_2 00171 centroid(const typename K::Point_2 &p, 00172 const typename K::Point_2 &q, 00173 const typename K::Point_2 &r, 00174 const typename K::Point_2 &s, const K& k) 00175 { 00176 return k.construct_centroid_2_object()(p, q, r, s); 00177 } 00178 00179 template < class K > 00180 inline 00181 typename K::Point_2 00182 centroid(const typename K::Triangle_2 &t, const K& k) 00183 { 00184 return k.construct_centroid_2_object()(t); 00185 } 00186 00187 template < class K > 00188 inline 00189 typename K::Point_2 00190 circumcenter(const typename K::Point_2 &p, 00191 const typename K::Point_2 &q, const K& k) 00192 { 00193 return k.construct_circumcenter_2_object()(p, q); 00194 } 00195 00196 template < class K > 00197 inline 00198 typename K::Point_2 00199 circumcenter(const typename K::Point_2 &p, 00200 const typename K::Point_2 &q, 00201 const typename K::Point_2 &r, const K& k) 00202 { 00203 return k.construct_circumcenter_2_object()(p, q, r); 00204 } 00205 00206 template < class K > 00207 inline 00208 typename K::Point_2 00209 circumcenter(const typename K::Triangle_2 &t, const K& k) 00210 { 00211 return k.construct_circumcenter_2_object()(t); 00212 } 00213 00214 template < class K > 00215 inline 00216 typename K::Boolean 00217 collinear(const typename K::Point_2 &p, 00218 const typename K::Point_2 &q, 00219 const typename K::Point_2 &r, const K& k) 00220 { 00221 return k.collinear_2_object()(p, q, r); 00222 } 00223 00224 template < class K > 00225 inline 00226 typename K::Boolean 00227 collinear_are_ordered_along_line(const typename K::Point_2 &p, 00228 const typename K::Point_2 &q, 00229 const typename K::Point_2 &r, 00230 const K& k) 00231 { 00232 return k.collinear_are_ordered_along_line_2_object()(p, q, r); 00233 } 00234 00235 template < class K > 00236 inline 00237 typename K::Boolean 00238 collinear_are_strictly_ordered_along_line( 00239 const typename K::Point_2 &p, 00240 const typename K::Point_2 &q, 00241 const typename K::Point_2 &r, const K& k) 00242 { 00243 return k.collinear_are_strictly_ordered_along_line_2_object()(p, q, r); 00244 } 00245 00246 template < typename K > 00247 inline 00248 typename K::Comparison_result 00249 compare_angle_with_x_axis(const typename K::Direction_2& d1, 00250 const typename K::Direction_2& d2, 00251 const K& k) 00252 { 00253 return k.compare_angle_with_x_axis_2_object()(d1, d2); 00254 } 00255 00256 template <class K > 00257 inline 00258 typename K::Comparison_result 00259 compare_distance_to_point(const typename K::Point_2 &p, 00260 const typename K::Point_2 &q, 00261 const typename K::Point_2 &r, const K& k) 00262 { 00263 return k.compare_distance_2_object()(p, q, r); 00264 } 00265 00266 template <class K > 00267 inline 00268 typename K::Comparison_result 00269 compare_squared_distance(const typename K::Point_2 &p, 00270 const typename K::Point_2 &q, 00271 const typename K::FT &d2, const K& k) 00272 { 00273 return k.compare_squared_distance_2_object()(p, q, d2); 00274 } 00275 00276 template <class K> 00277 inline 00278 typename K::Comparison_result 00279 compare_signed_distance_to_line(const typename K::Point_2& p, 00280 const typename K::Point_2& q, 00281 const typename K::Point_2& r, 00282 const typename K::Point_2& s, 00283 const K& k) 00284 { 00285 if (k.less_signed_distance_to_line_2_object()(p, q, r, s)) return SMALLER; 00286 if (k.less_signed_distance_to_line_2_object()(p, q, s, r)) return LARGER; 00287 return EQUAL; 00288 } 00289 00290 template <class K> 00291 inline 00292 typename K::Comparison_result 00293 compare_signed_distance_to_line(const typename K::Line_2& l, 00294 const typename K::Point_2& p, 00295 const typename K::Point_2& q, 00296 const K& k) 00297 { 00298 if (k.less_signed_distance_to_line_2_object()(l, p, q)) return SMALLER; 00299 if (k.less_signed_distance_to_line_2_object()(l, q, p)) return LARGER; 00300 return EQUAL; 00301 } 00302 00303 template < class K > 00304 inline 00305 typename K::Comparison_result 00306 compare_slopes(const typename K::Line_2 &l1, 00307 const typename K::Line_2 &l2, const K& k) 00308 { 00309 return k.compare_slope_2_object()(l1, l2); 00310 } 00311 00312 template < class K > 00313 inline 00314 typename K::Comparison_result 00315 compare_slopes(const typename K::Segment_2 &s1, 00316 const typename K::Segment_2 &s2, const K& k) 00317 { 00318 return k.compare_slope_2_object()(s1, s2); 00319 } 00320 00321 template < class K > 00322 inline 00323 typename K::Comparison_result 00324 compare_x(const typename K::Point_2 &p, 00325 const typename K::Point_2 &q, const K& k) 00326 { 00327 return k.compare_x_2_object()(p, q); 00328 } 00329 00330 template < class K > 00331 inline 00332 typename K::Comparison_result 00333 compare_x(const typename K::Point_2 &p, 00334 const typename K::Line_2 &l1, 00335 const typename K::Line_2 &l2, const K& k) 00336 { 00337 return k.compare_x_2_object()(p, l1, l2); 00338 } 00339 00340 template < class K > 00341 inline 00342 typename K::Comparison_result 00343 compare_x(const typename K::Line_2 &l, 00344 const typename K::Line_2 &h1, 00345 const typename K::Line_2 &h2, const K& k) 00346 { 00347 return k.compare_x_2_object()(l, h1, h2); 00348 } 00349 00350 template < class K > 00351 inline 00352 typename K::Comparison_result 00353 compare_x(const typename K::Line_2 &l1, 00354 const typename K::Line_2 &h1, 00355 const typename K::Line_2 &l2, 00356 const typename K::Line_2 &h2, const K& k) 00357 { 00358 return k.compare_x_2_object()(l1, h1, l2, h2); 00359 } 00360 00361 template < class K > 00362 inline 00363 typename K::Comparison_result 00364 compare_x_at_y(const typename K::Point_2& p, 00365 const typename K::Line_2& h, const K& k) 00366 { 00367 return k.compare_x_at_y_2_object()(p, h); 00368 } 00369 00370 /* Undocumented 00371 template < class K > 00372 inline 00373 typename K::Comparison_result 00374 compare_y_at_x(const typename K::Point_2 &p, 00375 const typename K::Segment_2 &s, const K& k) 00376 { 00377 return k.compare_y_at_x_2_object()(p, s); 00378 } 00379 */ 00380 00381 template < class K > 00382 inline 00383 typename K::Comparison_result 00384 compare_x_at_y(const typename K::Point_2 &p, 00385 const typename K::Line_2 &h1, 00386 const typename K::Line_2 &h2, const K& k) 00387 { 00388 return k.compare_x_at_y_2_object()(p, h1, h2); 00389 } 00390 00391 template < class K > 00392 inline 00393 typename K::Comparison_result 00394 compare_x_at_y(const typename K::Line_2 &l1, 00395 const typename K::Line_2 &l2, 00396 const typename K::Line_2 &h, const K& k) 00397 { 00398 return k.compare_x_at_y_2_object()(l1, l2, h); 00399 } 00400 00401 template < class K > 00402 inline 00403 typename K::Comparison_result 00404 compare_x_at_y(const typename K::Line_2 &l1, 00405 const typename K::Line_2 &l2, 00406 const typename K::Line_2 &h1, 00407 const typename K::Line_2 &h2, const K& k) 00408 { 00409 return k.compare_x_at_y_2_object()(l1, l2, h1, h2); 00410 } 00411 00412 template < class K > 00413 inline 00414 typename K::Comparison_result 00415 compare_xy(const typename K::Point_2 &p, 00416 const typename K::Point_2 &q, const K& k) 00417 { 00418 return k.compare_xy_2_object()(p, q); 00419 } 00420 00421 template < class K > 00422 inline 00423 typename K::Comparison_result 00424 compare_yx(const typename K::Point_2 &p, 00425 const typename K::Point_2 &q, const K& k) 00426 { 00427 return k.compare_yx_2_object()(p, q); 00428 } 00429 00430 template < class K > 00431 inline 00432 typename K::Comparison_result 00433 compare_y(const typename K::Point_2 &p, 00434 const typename K::Point_2 &q, const K& k) 00435 { 00436 return k.compare_y_2_object()(p, q); 00437 } 00438 00439 template < class K > 00440 inline 00441 typename K::Comparison_result 00442 compare_y(const typename K::Point_2 &p, 00443 const typename K::Line_2 &l1, 00444 const typename K::Line_2 &l2, const K& k) 00445 { 00446 return k.compare_y_2_object()(p, l1, l2); 00447 } 00448 00449 template < class K > 00450 inline 00451 typename K::Comparison_result 00452 compare_y(const typename K::Line_2 &l1, 00453 const typename K::Line_2 &l2, 00454 const typename K::Line_2 &h1, 00455 const typename K::Line_2 &h2, const K& k) 00456 { 00457 return k.compare_y_2_object()(l1, l2, h1, h2); 00458 } 00459 00460 template < class K > 00461 inline 00462 typename K::Comparison_result 00463 compare_y(const typename K::Line_2 &l, 00464 const typename K::Line_2 &h1, 00465 const typename K::Line_2 &h2, const K& k) 00466 { 00467 return k.compare_y_2_object()(l, h1, h2); 00468 } 00469 00470 template < class K > 00471 inline 00472 typename K::Comparison_result 00473 compare_y_at_x(const typename K::Point_2 &p, 00474 const typename K::Segment_2 &s, const K& k) 00475 { 00476 return k.compare_y_at_x_2_object()(p, s); 00477 } 00478 00479 template < class K > 00480 inline 00481 typename K::Comparison_result 00482 compare_y_at_x(const typename K::Point_2 &p, 00483 const typename K::Segment_2 &s1, 00484 const typename K::Segment_2 &s2, const K& k) 00485 { 00486 return k.compare_y_at_x_2_object()(p, s1, s2); 00487 } 00488 00489 template < class K > 00490 inline 00491 typename K::Comparison_result 00492 compare_y_at_x(const typename K::Point_2 &p, 00493 const typename K::Line_2 &l, const K& k) 00494 { 00495 return k.compare_y_at_x_2_object()(p, l); 00496 } 00497 00498 template < class K > 00499 inline 00500 typename K::Comparison_result 00501 compare_y_at_x(const typename K::Point_2 &p, 00502 const typename K::Line_2 &h1, 00503 const typename K::Line_2 &h2, const K& k) 00504 { 00505 return k.compare_y_at_x_2_object()(p, h1, h2); 00506 } 00507 00508 template < class K > 00509 inline 00510 typename K::Comparison_result 00511 compare_y_at_x(const typename K::Line_2 &l1, 00512 const typename K::Line_2 &l2, 00513 const typename K::Line_2 &h, const K& k) 00514 { 00515 return k.compare_y_at_x_2_object()(l1, l2, h); 00516 } 00517 00518 template < class K > 00519 inline 00520 typename K::Comparison_result 00521 compare_y_at_x(const typename K::Line_2 &l1, 00522 const typename K::Line_2 &l2, 00523 const typename K::Line_2 &h1, 00524 const typename K::Line_2 &h2, const K& k) 00525 { 00526 return k.compare_y_at_x_2_object()(l1, l2, h1, h2); 00527 } 00528 00529 template < class K > 00530 inline 00531 typename K::FT 00532 determinant(const typename K::Vector_2 &v0, 00533 const typename K::Vector_2 &v1, const K &k) 00534 { 00535 return k.compute_determinant_2_object()(v0, v1); 00536 } 00537 00538 template <class K> 00539 inline 00540 typename K::Boolean 00541 has_larger_distance_to_point(const typename K::Point_2 &p, 00542 const typename K::Point_2 &q, 00543 const typename K::Point_2 &r, 00544 const K& k) 00545 { 00546 return k.less_distance_to_point_2_object()(p, r, q); 00547 } 00548 00549 template <class K> 00550 inline 00551 typename K::Boolean 00552 has_smaller_distance_to_point(const typename K::Point_2 &p, 00553 const typename K::Point_2 &q, 00554 const typename K::Point_2 &r, 00555 const K& k) 00556 { 00557 return k.less_distance_to_point_2_object()(p, q, r); 00558 } 00559 00560 template <class K> 00561 inline 00562 typename K::Boolean 00563 has_smaller_signed_distance_to_line(const typename K::Line_2& l, 00564 const typename K::Point_2& p, 00565 const typename K::Point_2& q, 00566 const K& k) 00567 { 00568 return k.less_signed_distance_to_line_2_object()(l, p, q); 00569 } 00570 00571 template <class K> 00572 inline 00573 typename K::Boolean 00574 has_larger_signed_distance_to_line(const typename K::Line_2& l, 00575 const typename K::Point_2& p, 00576 const typename K::Point_2& q, 00577 const K& k) 00578 { 00579 return k.less_signed_distance_to_line_2_object()(l, q, p); 00580 } 00581 00582 template <class K> 00583 inline 00584 typename K::Boolean 00585 has_larger_signed_distance_to_line(const typename K::Point_2& p, 00586 const typename K::Point_2& q, 00587 const typename K::Point_2& r, 00588 const typename K::Point_2& s, 00589 const K& k) 00590 { 00591 return k.less_signed_distance_to_line_2_object()(p, q, s, r); 00592 } 00593 00594 template <class K> 00595 inline 00596 typename K::Boolean 00597 has_smaller_signed_distance_to_line(const typename K::Point_2& p, 00598 const typename K::Point_2& q, 00599 const typename K::Point_2& r, 00600 const typename K::Point_2& s, 00601 const K& k) 00602 { 00603 return k.less_signed_distance_to_line_2_object()(p, q, r, s); 00604 } 00605 00606 template < class K > 00607 inline 00608 typename K::Boolean 00609 left_turn(const typename K::Point_2 &p, 00610 const typename K::Point_2 &q, 00611 const typename K::Point_2 &r, const K& k) 00612 { 00613 return k.left_turn_2_object()(p, q, r); 00614 } 00615 00616 template < class K > 00617 inline 00618 typename K::Boolean 00619 less_x(const typename K::Point_2 &p, 00620 const typename K::Point_2 &q, const K& k) 00621 { 00622 return k.less_x_2_object()(p, q); 00623 } 00624 00625 template < class K > 00626 inline 00627 typename K::Boolean 00628 less_y(const typename K::Point_2 &p, 00629 const typename K::Point_2 &q, const K& k) 00630 { 00631 return k.less_y_2_object()(p, q); 00632 } 00633 00634 template < class K > 00635 inline 00636 typename K::Boolean 00637 lexicographically_xy_larger(const typename K::Point_2 &p, 00638 const typename K::Point_2 &q, 00639 const K& k) 00640 { 00641 return k.compare_xy_2_object()(p, q) == LARGER; 00642 } 00643 00644 template < class K > 00645 inline 00646 typename K::Boolean 00647 lexicographically_xy_larger_or_equal(const typename K::Point_2 &p, 00648 const typename K::Point_2 &q, 00649 const K& k) 00650 { 00651 return k.compare_xy_2_object()(p, q) != SMALLER; 00652 } 00653 00654 template < class K > 00655 inline 00656 typename K::Boolean 00657 lexicographically_xy_smaller(const typename K::Point_2 &p, 00658 const typename K::Point_2 &q, 00659 const K& k) 00660 { 00661 return k.less_xy_2_object()(p, q); 00662 } 00663 00664 template < class K > 00665 inline 00666 typename K::Boolean 00667 lexicographically_xy_smaller_or_equal(const typename K::Point_2 &p, 00668 const typename K::Point_2 &q, 00669 const K& k) 00670 { 00671 return k.compare_xy_2_object()(p, q) != LARGER; 00672 } 00673 00674 template < class K > 00675 inline 00676 typename K::Boolean 00677 lexicographically_yx_smaller(const typename K::Point_2 &p, 00678 const typename K::Point_2 &q, 00679 const K& k) 00680 { 00681 return k.less_yx_2_object()(p, q); 00682 } 00683 00684 template < class K > 00685 inline 00686 typename K::Boolean 00687 lexicographically_yx_smaller_or_equal(const typename K::Point_2 &p, 00688 const typename K::Point_2 &q, 00689 const K& k) 00690 { 00691 return !k.less_yx_2_object()(q, p); 00692 } 00693 00694 // FIXME : Undocumented 00695 template < class K > 00696 inline 00697 typename K::Boolean 00698 lexicographically_yx_larger(const typename K::Point_2 &p, 00699 const typename K::Point_2 &q, 00700 const K& k) 00701 { 00702 return k.less_yx_2_object()(q, p); 00703 } 00704 00705 // FIXME : Undocumented 00706 template < class K > 00707 inline 00708 typename K::Boolean 00709 lexicographically_yx_larger_or_equal(const typename K::Point_2 &p, 00710 const typename K::Point_2 &q, 00711 const K& k) 00712 { 00713 return !k.less_yx_2_object()(p, q); 00714 } 00715 00716 template < class K > 00717 inline 00718 typename K::Point_2 00719 midpoint(const typename K::Point_2 &p, 00720 const typename K::Point_2 &q, const K &k) 00721 { 00722 return k.construct_midpoint_2_object()(p, q); 00723 } 00724 00725 template < class K > 00726 inline 00727 typename K::Point_2 00728 max_vertex(const typename K::Iso_rectangle_2 &ir, const K &k) 00729 { 00730 return k.construct_max_vertex_2_object()(ir); 00731 } 00732 00733 template < class K > 00734 inline 00735 typename K::Point_2 00736 min_vertex(const typename K::Iso_rectangle_2 &ir, const K &k) 00737 { 00738 return k.construct_min_vertex_2_object()(ir); 00739 } 00740 00741 template <typename K> 00742 inline 00743 typename K::Orientation 00744 orientation(const typename K::Point_2 &p, 00745 const typename K::Point_2 &q, 00746 const typename K::Point_2 &r, const K &k) 00747 { 00748 return k.orientation_2_object()(p, q, r); 00749 } 00750 00751 template <typename K> 00752 inline 00753 typename K::Orientation 00754 orientation(const typename K::Vector_2 &u, 00755 const typename K::Vector_2 &v, const K &k) 00756 { 00757 return k.orientation_2_object()(u, v); 00758 } 00759 00760 template <typename K> 00761 inline 00762 typename K::Boolean 00763 parallel(const typename K::Line_2 &l1, 00764 const typename K::Line_2 &l2, const K &k) 00765 { 00766 return k.are_parallel_2_object()(l1, l2); 00767 } 00768 00769 template <typename K> 00770 inline 00771 typename K::Boolean 00772 parallel(const typename K::Ray_2 &r1, 00773 const typename K::Ray_2 &r2, const K &k) 00774 { 00775 return k.are_parallel_2_object()(r1, r2); 00776 } 00777 00778 template <typename K> 00779 inline 00780 typename K::Boolean 00781 parallel(const typename K::Segment_2 &s1, 00782 const typename K::Segment_2 &s2, const K &k) 00783 { 00784 return k.are_parallel_2_object()(s1, s2); 00785 } 00786 00787 template <typename K> 00788 inline 00789 typename K::Boolean 00790 right_turn(const typename K::Point_2 &p, 00791 const typename K::Point_2 &q, 00792 const typename K::Point_2 &r, const K &k) 00793 { 00794 return CGALi::orientation(p, q, r, k) == RIGHT_TURN; 00795 } 00796 00797 template <class K> 00798 inline 00799 typename K::Bounded_side 00800 side_of_bounded_circle(const typename K::Point_2 &p, 00801 const typename K::Point_2 &q, 00802 const typename K::Point_2 &r, 00803 const typename K::Point_2 &t, const K &k) 00804 { 00805 return k.side_of_bounded_circle_2_object()(p, q, r, t); 00806 } 00807 00808 template <class K> 00809 inline 00810 typename K::Bounded_side 00811 side_of_bounded_circle(const typename K::Point_2 &p, 00812 const typename K::Point_2 &q, 00813 const typename K::Point_2 &r, const K &k) 00814 { 00815 return k.side_of_bounded_circle_2_object()(p, q, r); 00816 } 00817 00818 template <class K> 00819 inline 00820 typename K::Oriented_side 00821 side_of_oriented_circle(const typename K::Point_2 &p, 00822 const typename K::Point_2 &q, 00823 const typename K::Point_2 &r, 00824 const typename K::Point_2 &t, const K &k) 00825 { 00826 return k.side_of_oriented_circle_2_object()(p, q, r, t); 00827 } 00828 00829 template < class K > 00830 inline 00831 typename K::FT 00832 squared_radius(const typename K::Point_2 &p, const K &k) 00833 { 00834 return k.compute_squared_radius_2_object()(p); 00835 } 00836 00837 template < class K > 00838 inline 00839 typename K::FT 00840 squared_radius(const typename K::Point_2 &p, 00841 const typename K::Point_2 &q, const K &k) 00842 { 00843 return k.compute_squared_radius_2_object()(p, q); 00844 } 00845 00846 template < class K > 00847 inline 00848 typename K::FT 00849 squared_radius(const typename K::Point_2 &p, 00850 const typename K::Point_2 &q, 00851 const typename K::Point_2 &r, const K &k) 00852 { 00853 return k.compute_squared_radius_2_object()(p, q, r); 00854 } 00855 00856 template < class K > 00857 inline 00858 typename K::Boolean 00859 x_equal(const typename K::Point_2 &p, 00860 const typename K::Point_2 &q, const K &k) 00861 { 00862 return k.equal_x_2_object()(p, q); 00863 } 00864 00865 template < class K > 00866 inline 00867 typename K::Boolean 00868 y_equal(const typename K::Point_2 &p, 00869 const typename K::Point_2 &q, const K &k) 00870 { 00871 return k.equal_y_2_object()(p, q); 00872 } 00873 00874 } // namespace CGALi 00875 00876 CGAL_END_NAMESPACE 00877 00878 #endif // CGAL_KERNEL_GLOBAL_FUNCTIONS_INTERNAL_2_H