gpt4 book ai didi

matlab - 点与圆相切

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:52 24 4
gpt4 key购买 nike

将其用作[引用][1]:Find a tangent point on circle?

cx = 0;
cy = 0;

px = -3;
py = -8;

dx = cx - px;
dy = cy - py;

a = asin(5 / ((dx*dx + dy*dy)^0.5));
b = atan2(dy, dx);

t_1 = deg2rad(180) + b - a;
t_2 = deg2rad(180) + b + a;

点 (7,6) 的角度为 7.9572/73.4434,点 (-3, -8) 的角度为 213.6264/285.2615。 所以对于第一象限,角度没有意义,但对于第三象限,它们有意义。我做错了什么?

最佳答案

a 的公式是错误的。你应该使用

a = acos(5 / ((dx*dx + dy*dy)^0.5))

代替

a = asin(5 / ((dx*dx + dy*dy)^0.5))

即使用 acos(...) 而不是 asin(...)。原因如下图所示。角度 a 的公式是 a=acos(r/H),其中 r 是圆的半径,H 是直角三角形斜边的长度。所以这与 asin(...) 无法知道传递的值位于两个可能象限中的哪一个这一事实无关。 asin 的参数始终为正,您希望答案始终在 0 到 90 度范围内。

image of circle with two tangents from an external point

所以你想要的两个角度的答案是 b+ab-a。在您的两个案例中使用 acos 而不是 asin 为您的第一象限示例生成 97.7592 & -16.5566(或等效 343.4434),以及 -164.7385 & -56.3736(或等效 195.2615 和303.6264)作为您的第三象限示例。 (注意:不是在 t_1t-2 的公式中添加 180 度,您可以只切换 dxdy)

关于matlab - 点与圆相切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com