geometry - 如何构造与一到三个线段相切并经过一到两个点的圆?
问题描述
我需要三个方程(算法)来找到圆:
- 与三个线段相切。
- 与两条线段和一个点相切。
- 与线段和两点相切。或者需要证明这样的圈子是不可能构建的。
在第一种情况下,我有三个线段:[A1,B1],[A2,B2],[A3,B3]。而且我想检查一下,是否有可能构建一个将所有这些都连接起来的圆圈。如果是这样,我需要一个这样的圈子。
其他情况同理。
解决方案
以标准形式写出线方程
ai*x + bi*y + ci = 0 (where ai^2+bi^2=1)
建立线性方程组
(a2-a1)*cx + (b2-b1)*cy = c1-c2
(a3-a1)*cx + (b3-b1)*cy = c1-c3
并解决它以获得内圆中心坐标cx, cy
。
然后将这些坐标代入第一行方程得到圆半径
R = abs(a1*cx + b1*cy + c1)
请注意,改变系数差异的符号,我们可以获得另外 3 个解决方案 - 对于外圆接触所有三条线的情况。
PS每个主题有一个问题的规则
推荐阅读
- reactive-programming - Spring Webflux - 如何从 Mono/Flux 中多次检索值,而无需多次调用以获得那些 Mono/Flux
- xamarin.forms - Xamarin.Forms:iOS 上的 Burger IconImageSource 像素化
- python - 从循环中保存新栅格图层的问题
- xml - 安装插件时出现 Odoo 错误:查看继承错误
- kubernetes - 当更改最大/最小副本限制时,水平 pod 自动缩放器如何处理未就绪的 pod
- html - CSS:没有“拉伸”左边框的填充顶部
- python - 使用 reportLab 将页眉和页脚添加到页面
- neo4j - 如何在 docker-compose 文件中的 neo4j 中启用“apoc.nlp.gcp.entities.stream”?
- javascript - ESP 32 AsyncWebServer 下载 .txt 文件?
- httpclient - 错误:调用使用属性错误声明的“HTTPClient::begin”:过时的 API,使用 ::begin(WiFiClient, url)