2008-03-28 13:56:47 -07:00
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
2008-06-27 17:06:23 -07:00
|
|
|
package math
|
2008-03-28 13:56:47 -07:00
|
|
|
|
|
|
|
|
|
2009-03-05 13:31:01 -08:00
|
|
|
// Atan returns the arc tangent of y/x, using
|
|
|
|
|
// the signs of the two to determine the quadrant
|
|
|
|
|
// of the return value.
|
|
|
|
|
func Atan2(x, y float64) float64 {
|
|
|
|
|
// Determine the quadrant and call atan.
|
|
|
|
|
if x+y == x {
|
|
|
|
|
if x >= 0 {
|
2009-11-09 21:23:52 -08:00
|
|
|
return Pi / 2
|
2008-03-28 13:56:47 -07:00
|
|
|
}
|
2009-10-06 19:40:35 -07:00
|
|
|
return -Pi / 2;
|
2008-03-28 13:56:47 -07:00
|
|
|
}
|
2009-11-09 21:23:52 -08:00
|
|
|
q := Atan(x / y);
|
2009-03-05 13:31:01 -08:00
|
|
|
if y < 0 {
|
|
|
|
|
if q <= 0 {
|
2009-11-09 21:23:52 -08:00
|
|
|
return q + Pi
|
2008-03-28 13:56:47 -07:00
|
|
|
}
|
2009-11-09 21:23:52 -08:00
|
|
|
return q - Pi;
|
2008-03-28 13:56:47 -07:00
|
|
|
}
|
2009-03-05 13:31:01 -08:00
|
|
|
return q;
|
2008-03-28 13:56:47 -07:00
|
|
|
}
|