Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-05-2006, 10:42   #1 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
String??

Hi @all,

Ich hab folgenden Code...
Code:
		
function vmag(planName:String){

var cosi=(RaDec[2]*RaDec[2]) + (helioXYZ[3]*helioXYZ[3])-1/2*RaDec[2]*helioXYZ[3];
var i=cosd(cosi);
var m0=0;

if (planName=="Mercury"){m0=-0.003+1.815*(i/100)+1.023*((i/100)*(i/100));}
if (planName=="Venus"  ){m0=-4.00+1.322*(i/100)+0.4247*((i/100)*(i/100)*(i/100));}
if (planName=="Mars"   ){m0=-1.30+1.486*(i/100);}
if (planName=="Jupiter"){m0=-8.93;}
if (planName=="Saturn" ){m0=-8.68;}
			 
return m0+5*Math.log(helioXYZ[3]*(RaDec[2]/149597870*149597870));
		  
}
...in die Funktion schleus ich nun einen String ein nemlich planName.
Aber komischerweise sieht AS das irgendwie nicht als String? Im Debugger steht: unter Lokale Variablen Name: planName Wert="Mercury".
Aber warum spring er nicht in die if Verzweigung und rechnet m0 aus ??
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 10:47   #2 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
tut er doch - hab mal im case "mercury" um nen trace erweitert.

Code:
function vmag(planName:String){

var cosi=(RaDec[2]*RaDec[2]) + (helioXYZ[3]*helioXYZ[3])-1/2*RaDec[2]*helioXYZ[3];
var i=cosd(cosi);
var m0=0;

if (planName=="Mercury"){m0=-0.003+1.815*(i/100)+1.023*((i/100)*(i/100));trace("test")}
if (planName=="Venus"  ){m0=-4.00+1.322*(i/100)+0.4247*((i/100)*(i/100)*(i/100));}
if (planName=="Mars"   ){m0=-1.30+1.486*(i/100);}
if (planName=="Jupiter"){m0=-8.93;}
if (planName=="Saturn" ){m0=-8.68;}
			 
return m0+5*Math.log(helioXYZ[3]*(RaDec[2]/149597870*149597870));
		  
}

vmag("Mercury");
pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 10:51   #3 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
upps -lesen bringt vorteile...

warum er es nicht ausrechnet - weil m0 in deiner rechnung als wert NaN
herausbekommt - "not a number"...
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 10:57   #4 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
wieso kommt naN bei m0 raus?
ich definiere doch m0 in der 6ten Zeile var m0 = 0 ?

...das mach ich eigentlich nur, um sie zu initalisiern.
bei mir im Debugger schreibt er m0=0, was ja auch stimmt?
nur ins if geht er nicht?
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:12   #5 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
Code:
trace(typeof(cosi) + " :: " + typeof(i) + " :: " + typeof(m0));
was sagt er dir im trace? alle 3 vom type Number?
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:15   #6 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
aha! interessant!!
...komischerweise rechnet er ja das cosi und i eben auch nicht aus, weshalb dann in m0 auch nur 0 oder NaN rauskommt??
Aber ich schau nochmal...
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:17   #7 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
das liegt wahrscheinlich daran, das die werte aus deinem array, mit denen du
bei cosi rechnest nicht vom type number sind.
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:25   #8 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
...jo kann sein, ich hab sie nicht mit :Number definiert sonder nur mit var?

das RaDec hab ich hier...
Code:
		function RaDec(planet,erde,jd) {
		  // Equatorial coordinates
		  var xp=planet[0];//trace("x:"+xp);
		  var yp=planet[1];//trace("y:"+yp);
		  var zp=planet[2];//trace("z:"+zp);
		  
		  // julian date
		  var jdobs=jd;
		  // Obliquity of Ecliptic
		  var obl=23.4393-3.563E-7*(jdobs-2451543.5);
		  
		  // Convert to Geocentric coordinates
			  var x1=xp-erde[0];
			  var y1=(yp-erde[1])*cosd(obl)-(zp-erde[2])*sind(obl);
			  var z1=(yp-erde[1])*sind(obl)+(zp-erde[2])*cosd(obl);
		  
		  // RA and dec
		  var ra=rev(atan2d(y1,x1));
		  var dec=atan2d(z1,Math.sqrt(x1*x1+y1*y1));
		 
		 // Earth distance
		  var r=Math.sqrt(x1*x1+y1*y1+z1*z1);
		  
		  return new Array(ra,dec,r);
		}
und das helioXYZ hier...
Code:
		function helioXYZ(jd,pNr) {
		  
		  var rads = Math.PI/180;
		  var degs= 180/Math.PI;
			
		  var T=(jd-2451545.0)/36525;
		  var T2=T*T;
		  var T3=T2*T;
		
		  // Mean longitude
		  var L = Planet.DS[pNr][1][0] +
				  Planet.DS[pNr][1][1]*T +
				  Planet.DS[pNr][1][2]*T2+
				  Planet.DS[pNr][1][3]*T3;
		 
		 // semimajor axis
		  var a = Planet.DS[pNr][2][0] +
				  Planet.DS[pNr][2][1]*T +
				  Planet.DS[pNr][2][2]*T2+
				  Planet.DS[pNr][2][3]*T3;
		
		  // eccentricity
		  var e = Planet.DS[pNr][3][0] +
				  Planet.DS[pNr][3][1]*T +
				  Planet.DS[pNr][3][2]*T2+
				  Planet.DS[pNr][3][3]*T3;
		
		  // inclination
		  var i = Planet.DS[pNr][4][0] +
				  Planet.DS[pNr][4][1]*T +
				  Planet.DS[pNr][4][2]*T2+
				  Planet.DS[pNr][4][3]*T3;
				  
		 // longitude of ascending node
		  var N = Planet.DS[pNr][5][0] +
				  Planet.DS[pNr][5][1]*T +
				  Planet.DS[pNr][5][2]*T2+
				  Planet.DS[pNr][5][3]*T3;
		 
		 // longitude of perihelion
		  var P = Planet.DS[pNr][6][0] +
				  Planet.DS[pNr][6][1]*T +
				  Planet.DS[pNr][6][2]*T2+
				  Planet.DS[pNr][6][3]*T3;
		 
		  var M=range360(L-P);
		  var w=range360(L-N-M);
		
			  // Eccentric anomaly
			  var E0=M+(180.0/Math.PI)*e*Math.sin(M*rads)*(1+e*Math.cos(M*rads));//trace("E0:=" +E0);
			  var E=E0-(E0-(180.0/Math.PI)*e*Math.sin(E0*rads)-M)/(1-e*Math.cos(E0*rads));
				while (Math.abs(E0-E) > 0.0005) {
				E0=E;
				E=E0-(E0-(180.0/Math.PI)*e*Math.sin(E0*rads)-M)/(1-e*Math.cos(E0*rads));
			  };
		                                                               //trace("E :="+E);
			  
		  var x=a*(Math.cos(E*rads)-e);
		  var y=a*Math.sqrt(1-e*e)*Math.sin(E*rads);
		  var r=Math.sqrt(x*x+y*y);
		  var v=range360(atan2d(y,x));                                //trace("v:= "+v);
		
		// Heliocentric Ecliptic Rectangular Coordinates
		  var xeclip=r*(cosd(N)*cosd(v+w)-sind(N)*sind(v+w)*cosd(i)); //trace("xpos:="+xeclip);
		  var yeclip=r*(sind(N)*cosd(v+w)+cosd(N)*sind(v+w)*cosd(i)); //trace("ypos:="+yeclip);
		  var zeclip=r*sind(v+w)*sind(i);                             //trace("zpos:="+zeclip);
		 //Entfernung Planet-Sonne(AU)
		  var reclip=Math.sqrt((xeclip*xeclip)+(yeclip*yeclip)+(zeclip*zeclip))
		  
		  return new Array(xeclip,yeclip,zeclip,reclip);
		}
...bei beiden geb ich ja mir return ein Array zurück, worauf ich eben mit

helioXYZ[3] bzw RaDec[2] zugreifen will?
Nun frag ich mich, ob er die Werte von helioXYZ[3] bzw RaDec[2] eben in der vmag noch hat?
hmm...
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:29   #9 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
versuch doch, wenn du cosi ausrechnest einfach den type Number zu erzwingen
Code:
cosi = Number(Number(var1) + Number(var2));
pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:32   #10 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
und ob er wie werte helioXYZ[3] bzw RaDec[2] noch in vmag hat oder nicht
kannst du innerhalb vmag doch eben tracen:

Code:
function vmag(planName:String){

trace(helioXYZ[3] + " :: " + RaDec[2]);

var cosi=(RaDec[2]*RaDec[2]) + (helioXYZ[3]*helioXYZ[3])-1/2*RaDec[2]*helioXYZ[3];
var i=cosd(cosi);
var m0=0;

if (planName=="Mercury"){m0=-0.003+1.815*(i/100)+1.023*((i/100)*(i/100));trace("test")}
if (planName=="Venus"  ){m0=-4.00+1.322*(i/100)+0.4247*((i/100)*(i/100)*(i/100));}
if (planName=="Mars"   ){m0=-1.30+1.486*(i/100);}
if (planName=="Jupiter"){m0=-8.93;}
if (planName=="Saturn" ){m0=-8.68;}
			 
return m0+5*Math.log(helioXYZ[3]*(RaDec[2]/149597870*149597870));
		  
}

vmag("Mercury");
steht im trace für die werte undefined kennt er sie an der stelle
wohl nicht mehr.

pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:46   #11 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
jo,
da steht undefind!

...ich versuch sie mal explizit als Number anzugeben!
Also var variable:Number = ... oder?
Ich hab die zwei functions wieder in einer überfunktion posPlan. Mit den Güligkeitsbereichen ist das so ne Sache in AS?? Vll sollt ich eh eher alles als _global angeben??


vorläufiges resultat kannst dir ja da:
http://www.dwienand.de/pP.html anschaun.

Geändert von Circushund (12-05-2006 um 11:48 Uhr)
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 11:47   #12 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
parseInt(); kann zaubern ...
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 12:04   #13 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
jetzt hab ich...
Code:
		function vmag(planName:String,rErde:Number,rPlanet:Number){
		
		trace(rErde + " :: " + rPlanet);
		var cosi:Number=(rErde*rErde) + (rPlanet*rPlanet)-1/(2*rErde*rPlanet);trace("cosi " +cosi)
		var i=cosd(cosi);
		var m0=0;
		
		if (planName=="Mercury"){m0=-0.003+1.815*(i/100)+1.023*((i/100)*(i/100));trace("m0" +m0)}
		if (planName=="Venus"  ){m0=-4.00+1.322*(i/100)+0.4247*((i/100)*(i/100)*(i/100));}
		if (planName=="Mars"   ){m0=-1.30+1.486*(i/100);}
		if (planName=="Jupiter"){m0=-8.93;}
		if (planName=="Saturn" ){m0=-8.68;}
					 
		return m0+5*Math.log(rPlanet*(rErde/149597870*149597870));
				  
		}
und ...
Code:
		Planet.hell =  vmag(Planet.DS[pNr][0],RaDec[2],helioXYZ[3]);
und immer noch in Ausgabe...
Code:
undefined :: undefined
cosiNaN
undefined :: undefined
..zum mäusemelken...
aber Danke dir für deine Hilfe trotzdem ...
Circushund ist offline   Mit Zitat antworten
Alt 12-05-2006, 12:10   #14 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
ja ja - der böse compiler will jetzt aber wirklich auch strikte typisierung,
und eigentlich ist das auch gut so...
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 12-05-2006, 13:31   #15 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
hmm...
ich wollt dir nochmal zeigen was so komisch ist ...



Code:
function vmag(planName:String,rErde:Number,rPlanet:Number){
 trace("Mein Name ist "+planName);
	var cosi:Number=(rErde*rErde) + (rPlanet*rPlanet)-1/(2*rErde*rPlanet);
	var i=cosd(cosi);trace("Mein i = " +cosi);
	var m0=0;
	
	if (planName == "Mercury"){m0=-0.003+1.815*(i/100)+1.023*((i/100)*(i/100));trace("hier mein m0 " +m0)}
	if (planName == "Venus"  ){m0=-4.00+1.322*(i/100)+0.4247*((i/100)*(i/100)*(i/100));trace("hier mein m0 " +m0)}
	if (planName == "Mars"   ){m0=-1.30+1.486*(i/100);trace("hier mein m0 " +m0)}
	if (planName == "Jupiter"){m0=-8.93;trace("hier mein m0 " +m0)}
	if (planName == "Saturn" ){m0=-8.68;trace("hier mein m0 " +m0)}
	 trace("So, nun bin ich fertig !");trace(" ");
	return m0 + 5 * Math.log(rPlanet*rErde/1);
		  
}
Ausgabe:
Code:
Mein Name ist Mercury
Mein i = 0.673010042863747
So, nun bin ich fertig !
 
Mein Name ist Venus
Mein i = 0.979031460040725
So, nun bin ich fertig !
 
Mein Name ist Earth
Mein i = -Infinity
So, nun bin ich fertig !
 
Mein Name ist Mars
Mein i = 6.6464027420804
So, nun bin ich fertig !
 
Mein Name ist Jupiter
Mein i = 48.8391401768337
So, nun bin ich fertig !
 
Mein Name ist Saturn
Mein i = 170.885363222299
So, nun bin ich fertig !
Definition von Planet:
Code:
_global.Planet=new Object();
Aufruf der vmag:
Code:
Planet.hell =  vmag(Planet.Name,Planet.rGeo,Planet.rHelio);
...evtl liegt es daran, das ich Planet als Object definiert hab??
somit wäre dann Planet.Name eigntlich irgendwie nicht String sondern... Object oderso?
Circushund ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele