英文:
Find a point at a specific angle from a center point in Go
问题
我想要能够使用一个中心点 (x,y) 和一个角度来找到一个距离中心给定距离的第二个点 (x2,y2)。
例如:
中心点是 0,0
角度是 50 度
距离是 10
下面的代码是错误的,试图解释这个答案 https://math.stackexchange.com/questions/143932/calculate-point-given-x-y-angle-and-distance,然而我不知道如何在 Go 中使用 θ。
抱歉,我已经很多年没有做这种数学了,这个问题可能听起来很愚蠢。
x := math.Cos(50)
y := math.Sin(50)
x2 := x *10
y2 := x *10
如何使用 Golang 找到 x2, y2?任何帮助将不胜感激。
英文:
I want to be able to use a center point (x,y) and an angle to find a second point (x2,y2) at a given distance from center.
For example:
Center is 0,0
Angle is 50 degrees
Distance is 10
The code below is wrong and trying to interpret this answer https://math.stackexchange.com/questions/143932/calculate-point-given-x-y-angle-and-distance however I have no idea how to incorporate the θ using Go.
Sorry I have not done this kind of math for many years and the question may sound stupid.
x := math.Cos(50)
y := math.Sin(50)
x2 := x *10
y2 := x *10
How do I find x2, y2 using Golang? Any help would be appreciated.
答案1
得分: 1
Go数学函数使用弧度(radians)。您可能需要先将角度(degrees)转换为弧度(radians)。请参考下面的示例:
package main
import (
"fmt"
"math"
)
func main() {
x0 := float64(0)
y0 := float64(0)
// 假设正X轴表示0度(逆时针方向)。
fmt.Printf("(x0,y0)\tDegrees\tRadians\t(x1,y1)\n")
for _, degrees := range []float64{0, 30, 45, 90, 135, 180, 225, 270, 315} {
radians := degrees * math.Pi / 180
distance := float64(1)
x1 := x0 + distance*math.Cos(radians)
y1 := y0 + distance*math.Sin(radians)
fmt.Printf("(%g, %g)\t%g\t%.3f\t(%.3f, %.3f)\n", x0, y0, degrees, radians, x1, y1)
}
}
输出结果:
(x0,y0) Degrees Radians (x1,y1)
(0, 0) 0 0.000 (1.000, 0.000)
(0, 0) 30 0.524 (0.866, 0.500)
(0, 0) 45 0.785 (0.707, 0.707)
(0, 0) 90 1.571 (0.000, 1.000)
(0, 0) 135 2.356 (-0.707, 0.707)
(0, 0) 180 3.142 (-1.000, 0.000)
(0, 0) 225 3.927 (-0.707, -0.707)
(0, 0) 270 4.712 (-0.000, -1.000)
(0, 0) 315 5.498 (0.707, -0.707)
英文:
The Go math functions use radians. You may need to convert from degrees to radians first. See the example below:
package main
import (
"fmt"
"math"
)
func main() {
x0 := float64(0)
y0 := float64(0)
// Assume the positive X axis represents 0 degrees (anti-clockwise direction).
fmt.Printf("(x0,y0)\tDegrees\tRadians\t(x1,y1)\n")
for _, degrees := range []float64{0, 30, 45, 90, 135, 180, 225, 270, 315} {
radians := degrees * math.Pi / 180
distance := float64(1)
x1 := x0 + distance*math.Cos(radians)
y1 := y0 + distance*math.Sin(radians)
fmt.Printf("(%g, %g)\t%g\t%.3f\t(%.3f, %.3f)\n", x0, y0, degrees, radians, x1, y1)
}
}
Output:
(x0,y0) Degrees Radians (x1,y1)
(0, 0) 0 0.000 (1.000, 0.000)
(0, 0) 30 0.524 (0.866, 0.500)
(0, 0) 45 0.785 (0.707, 0.707)
(0, 0) 90 1.571 (0.000, 1.000)
(0, 0) 135 2.356 (-0.707, 0.707)
(0, 0) 180 3.142 (-1.000, 0.000)
(0, 0) 225 3.927 (-0.707, -0.707)
(0, 0) 270 4.712 (-0.000, -1.000)
(0, 0) 315 5.498 (0.707, -0.707)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论