第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在屏幕坐標(biāo)上使用三角函數(shù)來計(jì)算點(diǎn)之間的角度

如何在屏幕坐標(biāo)上使用三角函數(shù)來計(jì)算點(diǎn)之間的角度

Go
慕尼黑5688855 2021-11-22 18:38:17
我正在做一個(gè)游戲。這個(gè)游戲是自上而下的,實(shí)時(shí)的,并且必須具有路徑。我的游戲必須計(jì)算玩家當(dāng)前位置與他們點(diǎn)擊步行到達(dá)的位置之間的角度。問題是,我正在使用屏幕坐標(biāo),如“x 向右增加,y 向底部增加”這是我使用一些代碼的地方package mainimport (  "fmt"  "math")func main() {  position1 := &Position{550, 200}  position2 := &Position{700, 500}  vector1 := CreatePathVector(position1, position2, 50)  fmt.Printf("position1: %v\nposition2: %v\n", position1, position2)  position := position1  for i := 0; i < 5; i++ {    position = position.Add(vector1)    fmt.Printf("next position: %v\n", position)  }  position3 := &Position{400, 500}  position4 := &Position{700, 400}  vector2 := CreatePathVector(position3, position4, 50)  fmt.Printf("position3: %v\nposition4: %v\n", position3, position4)  position = position3  for i := 0; i < 5; i++ {    position = position.Add(vector2)    fmt.Printf("next position: %v\n", position)  }}type Position struct {  X float64  Y float64}type Vector struct {  Radians  float64  Distance float64}func CreatePathVector(pos1 *Position, pos2 *Position, speed int) *Vector {  ydiff := pos2.Y - pos1.Y  xdiff := pos2.X - pos1.X  radians := math.Atan2(ydiff, xdiff)  return &Vector{    Radians:  radians,    Distance: float64(speed),  }}func (p *Position) Add(v *Vector) *Position {  return &Position{    X: p.X + math.Sin(v.Radians)*v.Distance,    Y: p.Y + math.Cos(v.Radians)*v.Distance,  }}這是輸出position1: &{550 200}position2: &{700 500}next position: &{594.7213595499958 222.3606797749979}next position: &{639.4427190999916 244.72135954999578}next position: &{684.1640786499873 267.0820393249937}next position: &{728.8854381999831 289.44271909999156}next position: &{773.6067977499789 311.80339887498945}position3: &{400 500}position4: &{700 400}next position: &{384.1886116991581 547.4341649025257}next position: &{368.37722339831623 594.8683298050514}next position: &{352.56583509747435 642.3024947075771}next position: &{336.75444679663246 689.7366596101028}next position: &{320.9430584957906 737.1708245126285}如您所見,在兩個(gè)示例中,重復(fù)添加向量的步驟并沒有轉(zhuǎn)向目的地
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果您選擇使用笛卡爾坐標(biāo),就像我在評(píng)論中建議的那樣,這就是您的代碼的樣子:


package main


import (

  "fmt"

  "math"

)


func main() {

  position1 := &Position{550, 200}

  position2 := &Position{700, 500}

  vector1 := CreatePathVector(position1, position2, 70)


  fmt.Printf("position1: %v\nposition2: %v\n", position1, position2)


  position := position1

  for i := 0; i < 5; i++ {

    position = position.Add(vector1)

    fmt.Printf("next position: %v\n", position)

  }


  position3 := &Position{400, 500}

  position4 := &Position{700, 400}

  vector2 := CreatePathVector(position3, position4, 50)


  fmt.Printf("position3: %v\nposition4: %v\n", position3, position4)


  position = position3

  for i := 0; i < 5; i++ {

    position = position.Add(vector2)

    fmt.Printf("next position: %v\n", position)

  }

}


type Position struct {

  X float64

  Y float64

}


type Vector struct {

  dX  float64

  dY float64

}


func CreatePathVector(pos1 *Position, pos2 *Position, speed int) *Vector {

  ydiff := pos2.Y - pos1.Y

  xdiff := pos2.X - pos1.X

  mag := math.Sqrt(xdiff*xdiff+ydiff*ydiff)



  return &Vector{

    dX:  xdiff/mag*float64(speed),

    dY:  ydiff/mag*float64(speed),

  }

}


func (p *Position) Add(v *Vector) *Position {

  return &Position{

    X: p.X + v.dX,

    Y: p.Y + v.dY,

  }

}

如果你想堅(jiān)持的角度,只是切換Cos和Sin中Add。這是因?yàn)槠聊坏姆较虿⒉恢匾喝绻惆裻 = arctan(y/x)你y的背部sin(t)和x從背部cos(t)不管是什么x和y代表。所以添加應(yīng)該是這樣的:


func (p *Position) Add(v *Vector) *Position {

  return &Position{

    X: p.X + math.Cos(v.Radians)*v.Distance,

    Y: p.Y + math.Sin(v.Radians)*v.Distance,

  }

}

我之前做過一些小游戲,我也嘗試過使用角度來移動(dòng)。我的建議是不要嘗試。如果您想為游戲添加更逼真的物理效果,向量和線性代數(shù)將是您最好的朋友。在我看來,角度和三角函數(shù)太混亂了。


查看完整回答
反對(duì) 回復(fù) 2021-11-22
  • 1 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)