Skip to main content

Euclidea 14.5 解法与证明

Euclidea 14.5

如图,给定三个两两相切的圆,O,O_1, O_2。三个圆心共线。

任务:尺规作出一个圆,与给定的三个圆都相切。



解法:


  1. 设圆O与圆O_1的切点为A
  2. 连接OA
  3. 过O做OA垂线交圆O于D
  4. 以D为圆心,DA为半径作圆,交圆O_1和圆O_2于E和F。
  5. 作直线EO_1和FO_2交于G
  6. 以G为圆心,GE为半径作圆
  7. 圆G即为所求圆



简要证明:

  1. 如图,设三个圆切点为A,B,C。明显A,B,C,O,O_1,O_2五点共线。
  2. 以A为中心作反演变换,取反演圆与圆O_2正交。于是圆O_2经反演变换后不变。B,C互为反演点。
  3. 分别过B和C做AB的垂线L_B和L_C。易知圆O1和圆O经反演变换后分别为L_B和L_C。
  4. 如图作圆G'同时与圆O_2,L_B和L_C相切于E'和F'。
  5. 过E'F'作直线L,易证C在L上,并且∠E'CB为45°。
  6. 设L经过反演变换得到的圆为圆D',考虑圆D'的性质:
    1. 直线AD'与直线L垂直
    2. 圆D'经过A(因为L不经过A)
    3. 圆D'经过B(因为L经过C,而B,C互为反演点)
  7. 于是可知圆D就是圆D',因此E和E', F和F'分别互为反演点。
  8. 设圆G'经过反演变换为圆G''。因为圆G'与L_B和圆O_2相切于E'和F',所以圆G''与圆O_1和圆O_2相切于E和F。
  9. 所以G''即是EO_1和FO_2的交点,且圆G''半径是G''E。于是圆G即是圆G''。
  10. 因为圆G'与L_B,圆O_2,L_C都相切,所以圆G与三个给定圆都相切。证明完毕。

参考资料:Pappus chain


Comments

Popular posts from this blog

A Rocky Migration: Moving from docker-compose to Podman and gVisor

I've been running a few containers for several years. They were all running under rootless Docker with a single user. Initially, I planned to  migrate the containers to VMs , but I couldn't get a stable workflow after about two months of effort. Later,  gVisor caught my attention , and I decided to migrate to Podman with gVisor instead. The new plan is to run each container with  --userns=auto  and use Quadlet for systemd integration. This approach provides better isolation and makes writing firewall rules easier. I'm now close to migrating all my containers. Here are a couple of rough edges I'd like to share. Network Layout I compared  various networking options  and spent a few hours trying the one-interface-per-group approach before giving up. I settled on a single macvlan network and decided to use static IP addresses for my containers. To prevent a randomly assigned IP address from conflicting with a predefined one, I allocated a large IP range for my ...

GameConqueror 0.09 -- Linux Game Hacking Tool

If you are a game hacker If you've been looking for a `CheatEngine for Linux` Then you can't miss this. ============================================== GameConqueror is a game hacking tool for linux, it's written in PyGTK and uses scanmem as its backend. It's supposed to be with most useful features of CheatEngine for Linux. Currently, I've implemented almost everything about scanning, involving variant data types and scan types: Data Types: int{8/16/32/64}, float{32/64}, unknown type(int or float) and unknown width(will try each of them), byte array and string Scan Types: equal, greater, less, changed, unchanged, increased(by), decreased(by) This should be enough for most cases, so I decided to release it at the current status. ============================================= Here's how you can get it PPA (for Ubuntu users) https://launchpad.net/~coolwanglu/+archive/scanmem (I've not test it in 32bit environments or Jaunty, do please inform me if it doe...

Fix Google Security Code

Google Security Code (http://g.co/sc) is one type of 2-step verification. This is particularly useful when security keys and passkeys are not available. I have been using it in my LXC containers, until today I found out that it stopped working. It just kept saying "The code is invalid". It is easy to rule out some factors: The code works on other browsers on my laptop. The code works on other devices that are directly connected to the router. So it appears that Google also checks IP addresses besides the security code. Recently I have IPv6 enabled, so most devices that are directly connected to the router have both IPv4 and IPv6 addresses. But  I only enabled IPv4 for my LXC containers. So I guess when a code is generated by device A and used by device B, Google should be able to check that device A and device B are closely located. But in my case, IPv6 address appears on device A but not on device B, which may look suspicious. To fix the problem, I just needed to disable IPv...