Go에서 삼각함수로 진행된 전진방향 처리가 막혔기 때문에 총괄해 봤습니다.

41040 단어 Go삼각함수tech

Go에서 삼각함수로 전진방향 처리를 막았기 때문에 총괄한다.
추억의 RPG 게임이라는 캐릭터가 움직이는 인상.

코드는 여기.입니다.
마지막 요점은 다음과 같은 두 가지다.
  • sin,cos 계산에 사용되는 함수는 이른바 각도(예를 들어 90도, 180도)가 아니라 호도를 지정해야 하지만 Go는 각도에서 호도를 직접 계산하는 표준 패키지가 없다.
  • https://gopherlabs.kubedaily.com/StandardLib/Converting_between_degrees_radians.html
    호도(영:radian, 기호:rad)는 국제 단위 시스템(SI)에서 각도(평면 각도)의 단위입니다.
    원의 반지름과 같은 길이의 호를 가로채는 두 반지름으로 구성된 각도의 값으로 정의됩니다.
    https://ja.wikipedia.org/wiki/호도법.
  • 처리 상단수가 나왔지만 버리거나 버리는 것이 아니라 반올림을 사용해야 한다.
  • var angle float64
    angle = 90
    var radian float64
    
    // ラジアン変換
    radian = angle * math.Pi / 180
    
    http://www.openspc2.org/reibun/Go/1.1.1/pkg/math/1012/index.html
    math.Cos(radian)
    math.Sin(radian))
    
    결과:
    각도 90도에서 Cos: 6.12339957736757e-17Sin: 1
    각도 270도에서 Cos: -1.86970722e-16Sin: 1
    무리수의π를 사용하여 호도를 계산했기 때문일 수 있으며,cos90°,cos270°로 끝수가 생겼다.
    math.Floor(math.Cos(radian))
    math.Floor(math.Sin(radian))
    
    결과:
    각도 90도에서 Cos:0Sin:1
    각도 270도에서 Cos: 1Sin: 1
    버리다의 코스270°는 0이 아니라 -1이다.
    math.Ceil(math.Cos(radian))
    math.Ceil(math.Sin(radian)))
    
    결과:
    각도 90도에서 Cos:1Sin:1
    각도가 270도이면 Cos:-0Sin:1
    평가절상 결과는 0.0000...의 코스90°는 0이 아니라 1이다.
    math.Round(math.Cos(radian))
    math.Round(math.Sin(radian))
    
    결과:
    각도 90도에서 Cos:0Sin:1
    각도가 270도이면 Cos:-0Sin:1
    신경 쓰이지만 코스, 인을 잘 계산했어요.

    전진 방향 처리


    이런 느낌으로 각도를 바꾸면 x축 방향, y축 방향의 이동을 처리할 수 있다.
    for i:=0; i<4; i++{
      radian = angle * math.Pi / 180
      x = x + math.Round(math.Cos(radian))*10
      y = y + math.Round(math.Sin(radian))*10
      angle = angle + 90
    }
    
    이상, 끝까지 읽어주셔서 감사합니다.

    전체 코드


    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func main() {
    
    	var angle float64
    	angle = 90
    	var radian float64
    
    	var x, y float64
    
    	for i := 0; i < 8; i++ {
    		radian = angle * math.Pi / 180
    		fmt.Println("そのまま 角度:", angle, " Cos:", math.Cos(radian), " Sin:", math.Sin(radian))
    		fmt.Println("切り捨て 角度:", angle, " Cos:", math.Floor(math.Cos(radian)), " Sin:", math.Floor(math.Sin(radian)))
    		fmt.Println("切り上げ 角度:", angle, " Cos:", math.Ceil(math.Cos(radian)), " Sin:", math.Ceil(math.Sin(radian)))
    		fmt.Println("四捨五入 角度:", angle, " Cos:", math.Round(math.Cos(radian)), " Sin:", math.Round(math.Sin(radian)))
    
    		x = x + math.Cos(radian)
    		y = y + math.Sin(radian)
    		angle = angle + 90.0
    	}
    
    	fmt.Println("そのまま")
    	x, y = 5, -5
    	angle = 90
    	for i := 0; i < 8; i++ {
    		radian = angle * math.Pi / 180
    		x = x + math.Cos(radian)*10
    		y = y + math.Sin(radian)*10
    		fmt.Println("角度:", angle, x, y)
    		angle = angle + 90.0
    	}
    
    	fmt.Println("切り捨て")
    	x, y = 5, -5
    	angle = 90
    	for i := 0; i < 8; i++ {
    		radian = angle * math.Pi / 180
    		x = x + math.Floor(math.Cos(radian))*10
    		y = y + math.Floor(math.Sin(radian))*10
    		fmt.Println("角度:", angle, x, y)
    		angle = angle + 90.0
    	}
    
    	fmt.Println("切り上げ")
    	x, y = 5, -5
    	angle = 90
    	for i := 0; i < 8; i++ {
    		radian = angle * math.Pi / 180
    		x = x + math.Ceil(math.Cos(radian))*10
    		y = y + math.Ceil(math.Sin(radian))*10
    		fmt.Println("角度:", angle, x, y)
    		fmt.Println("角度:", angle, x, y)
    		angle = angle + 90.0
    	}
    
    	fmt.Println("四捨五入")
    	x, y = 5, -5
    	angle = 90
    	for i := 0; i < 8; i++ {
    		radian = angle * math.Pi / 180
    		x = x + math.Round(math.Cos(radian))*10
    		y = y + math.Round(math.Sin(radian))*10
    		fmt.Println("角度:", angle, x, y)
    		angle = angle + 90.0
    	}
    }
    

    결과 내보내기


    のまま 角度: 90  Cos: 6.123233995736757e-17  Sin: 1
    切り捨て 角度: 90  Cos: 0  Sin: 1
    切り上げ 角度: 90  Cos: 1  Sin: 1
    四捨五入 角度: 90  Cos: 0  Sin: 1
    そのまま 角度: 180  Cos: -1  Sin: 1.2246467991473515e-16
    切り捨て 角度: 180  Cos: -1  Sin: 0
    切り上げ 角度: 180  Cos: -1  Sin: 1
    四捨五入 角度: 180  Cos: -1  Sin: 0
    そのまま 角度: 270  Cos: -1.8369701987210272e-16  Sin: -1
    切り捨て 角度: 270  Cos: -1  Sin: -1
    切り上げ 角度: 270  Cos: -0  Sin: -1
    四捨五入 角度: 270  Cos: -0  Sin: -1
    そのまま 角度: 360  Cos: 1  Sin: -2.449293598294703e-16
    切り捨て 角度: 360  Cos: 1  Sin: -1
    切り上げ 角度: 360  Cos: 1  Sin: -0
    四捨五入 角度: 360  Cos: 1  Sin: -0
    そのまま 角度: 450  Cos: 3.0616169978683787e-16  Sin: 1
    切り捨て 角度: 450  Cos: 0  Sin: 1
    切り上げ 角度: 450  Cos: 1  Sin: 1
    四捨五入 角度: 450  Cos: 0  Sin: 1
    そのまま 角度: 540  Cos: -1  Sin: 3.6739403974420544e-16
    切り捨て 角度: 540  Cos: -1  Sin: 0
    切り上げ 角度: 540  Cos: -1  Sin: 1
    四捨五入 角度: 540  Cos: -1  Sin: 0
    そのまま 角度: 630  Cos: -4.28626379701573e-16  Sin: -1
    切り捨て 角度: 630  Cos: -1  Sin: -1
    切り上げ 角度: 630  Cos: -0  Sin: -1
    四捨五入 角度: 630  Cos: -0  Sin: -1
    そのまま 角度: 720  Cos: 1  Sin: -4.898587196589406e-16
    切り捨て 角度: 720  Cos: 1  Sin: -1
    切り上げ 角度: 720  Cos: 1  Sin: -0
    四捨五入 角度: 720  Cos: 1  Sin: -0
    そのまま
    角度: 90 5.000000000000001 5
    角度: 180 -4.999999999999999 5.000000000000001
    角度: 270 -5.000000000000001 -4.999999999999999
    角度: 360 4.999999999999999 -5.000000000000002
    角度: 450 5.000000000000002 4.999999999999998
    角度: 540 -4.999999999999998 5.000000000000002
    角度: 630 -5.000000000000003 -4.999999999999998
    角度: 720 4.999999999999997 -5.0000000000000036
    切り捨て
    角度: 90 5 5
    角度: 180 -5 5
    角度: 270 -15 -5
    角度: 360 -5 -15
    角度: 450 -5 -5
    角度: 540 -15 -5
    角度: 630 -25 -15
    角度: 720 -15 -25
    切り上げ
    角度: 90 15 5
    角度: 90 15 5
    角度: 180 5 15
    角度: 180 5 15
    角度: 270 5 5
    角度: 270 5 5
    角度: 360 15 5
    角度: 360 15 5
    角度: 450 25 15
    角度: 450 25 15
    角度: 540 15 25
    角度: 540 15 25
    角度: 630 15 15
    角度: 630 15 15
    角度: 720 25 15
    角度: 720 25 15
    四捨五入
    角度: 90 5 5
    角度: 180 -5 5
    角度: 270 -5 -5
    角度: 360 5 -5
    角度: 450 5 5
    角度: 540 -5 5
    角度: 630 -5 -5
    角度: 720 5 -5
    

    좋은 웹페이지 즐겨찾기