首页 > 其他 > 详细

【模板】【计几】圆的反演

时间:2020-02-07 01:54:05      阅读:111      评论:0      收藏:0      [点我收藏+]

emm感觉圆的反演是一个很有趣的东西,而且也并没有那么高大上,其实就是一个图形映射到另一个图形而已。

参考博客:https://www.cnblogs.com/NineSwords/p/9225187.html

四点:

1、过反演中心的圆,反形(经过反演之后的图形)为不过反演中心的直线。

2、不过反演中心的直线,反形为过反演中心的圆。

3、不过反演中心的圆,反形也为不过反演中心的圆,并且反演中心为这两个互为反形的圆的位似中心。

4、相切两圆的反象仍相切,若切点恰是反演中心,则其反象为两平行线。

5、相离的两圆反演(反演中心不在圆上)后仍然相离;两圆相切,若反演中心在某圆上,则为反形为相切的直线与圆。

技术分享图片
 1 Point Point_Inver(Circle c0,Point P){
 2     Point OP = P - c0.o;
 3     double len = dis(c0.o,P);
 4     len = len*len;
 5     return c0.o + OP*( c0.r * c0.r / len );
 6 }
 7 Circle Circle_Inver(Circle c0,Circle a){
 8     Circle res;
 9     Point OA = a.o - c0.o;
10     double len = dis(a.o,c0.o);
11     Point up = c0.o + OA * ( ( len + a.r) / len );
12     Point down = c0.o + OA *( (len - a.r) / len );
13     up = Point_Inver(c0,up);
14     down = Point_Inver(c0,down);
15     res.o = (up+down) * 0.5;
16     res.r = dis(up,down) * 0.5;
17     return res;
18 }
19 Circle Line_Inver(Circle c0,Point a,Point b){
20     Circle res;
21     double d = fabs( cross(a,c0.o,b) / dis(a,b));
22     res.r = c0.r * c0.r / (2.0 * d);
23 
24     double len = dot(a,b,c0.o) / dis(a,b);
25     Point AB = b - a;
26     Point c = a + AB * (len/dis(a,b));
27     Point CO = c - c0.o;
28     res.o = c0.o + CO * (res.r/d);
29 
30     //double len = dis(a,c[1].o);
31     //res.o = c0.o + (a-c[1].o) * (res.r/len);
32     return res;
33 }
View Code

 

【模板】【计几】圆的反演

原文:https://www.cnblogs.com/xiaobuxie/p/12271038.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!