- Home /
NaN error for Mathf.Asin
Hello-
I keep getting a NaN error for certain variables(ph3, angleradians, and angle) in this script. I suspect the reason is that because both ph3 and angle are linked to angleradians, they cannot calculate the answer. Angleradians uses Mathf.Asin, but I cannot find what I did wrong. Any ideas?
#pragma strict
var shell:GameObject;
var self:GameObject;
var distance:float;
var ph1:float;
var ph2:float;
var ph3:float;
var angleradians:float;
var velocity = 240;
var angle:float;
var target:Transform;
function Update(){
distance = Vector3.Distance(target.position,transform.position);
//-----------------------------------------------------------------------
ph1 = distance*9.81;
ph2 = ph1/velocity;
angleradians = Mathf.Asin(ph2);
ph3 = angleradians * 3.14;
angle = ph3/180;
var currentrot = self.transform.rotation.x;
var requiredangle:float;
var requiredrot = currentrot - angle;
self.transform.eulerAngles.x = requiredangle;
Instantiate (shell, self.transform.position, self.transform.rotation);
}
Thank you! Asin was receiving a value of ~4 because velocity was not squared, as it should have been. Thank you all for the answers.
Answer by meat5000 · Sep 01, 2013 at 09:29 PM
although I'm sure you are aware that to convert to degrees you use AngleInRad*(180/pi)
angleradians = Mathf.Asin(ph2);
ph3 = angleradians * 3.14;
angle = ph3/180;
Should be
angleradians = Mathf.Asin(ph2);
ph3 = angleradians * 180;
angle = ph3/Mathf.PI;
Assuming you want 'angle' to be in degrees.
It looks like you are doing :
Degrees = Rads (PI/180) which is incorrect. It could be sending your degrees based functions right out. You are converting To Radians not From Radians*
Answer by Sajidfarooq · Sep 01, 2013 at 03:27 PM
Whenever velocity is zero, it causes a divide-by-zero error for ph2, resulting in a NaN for any variable that uses ph2.
Sajidfarooq is right so I didn't post another answer. Thought your should see these functions for converting between deg and rad.
Saves you playing with 3.14 and 180, although I'm sure you are aware that to convert to degrees you use AngleInRad*(180/pi)
http://docs.unity3d.com/Documentation/ScriptReference/$$anonymous$$athf.Rad2Deg.html
http://docs.unity3d.com/Documentation/ScriptReference/$$anonymous$$athf.Deg2Rad.html
Thank you all for the quick answers. However, when I tried using:
ph1 = distance*9.81;
ph2 = ph1/240;
angleradians = $$anonymous$$athf.Asin(ph2);
(the velocity is a constant of 240), it still gave me the NaN error. In addition to this, it shouldn't be ph2 which is the problem, as ph2 is recieving a value.
What values are you getting for ph2? The inverse sin function, asin, only has real solutions between -1 and 1. Anything outside that range will result in a complex number. Since complex numbers are not considered in $$anonymous$$athf (or floating point numbers in general), if ph2 is less than -1, or greater than 1, then the result of the Asin function will be NaN.
Your answer
Follow this Question
Related Questions
problem with mathf function 2 Answers
NaN exception when spawning soldiers 1 Answer
2 Scripting Errors I need help fixing!! 3 Answers
Continual position error 0 Answers
SceneCamera NAN persisting problem 2 Answers