global LightPhi,LightTheta,LightX,LightY,LightZ
global Ang1,Ang2,Ang3,Ang4
global CrossPhi,CrossTheta
global QX,QY,QZ,QI,QJ,QK,QA,QB,QC
global RSratio#
global LNQ
global R1#,R2#
#CONSTANT B32Q=32
#CONSTANT TYPENUM=24
#CONSTANT DEF=101
#CONSTANT VECTORNUM=6
LightPhi=2
LightTheta=15
LightX=1
LightY=1
LightZ=1
Global DIM CrossAns(B32Q,B32Q,B32Q,B32Q,TYPENUM)
Global DIM Thetax(B32Q,B32Q)
Global DIM Thetay(B32Q,B32Q)
Global DIM Vectorpos(DEF,DEF,VECTORNUM)
Global DIM ImageRed(DEF,DEF)
Global DIM ImageGreen(DEF,DEF)
Global DIM Phizx(B32Q,B32Q)
Global DIM Phixy(B32Q,B32Q)
Global DIM Phizy(B32Q,B32Q)
Global DIM Phiyz(B32Q,B32Q)
Global DIM Phixz(B32Q,B32Q)
ShowThisOneX=3
ShowThisOneY=25
for SDG =0 to 100
for SDHC =0 to 100
GX#=10*SDG
GY#=10*SDG
GZ#=50.0
RTY#=sqrt(GX#^2+GY#^2+GZ#^2)
Ans=INT(ABS((ATAN(GY#/GX#)/90.0)*32.0))
Vectorpos(SDG,SDHC,0)=Ans
Ans=INT(ABS(ACOS(ABS(GZ#/RTY#))/90.0*32.0))
Vectorpos(SDG,SDHC,1)=Ans
Ans=INT(ABS(ln(RTY#)/ln(1.11)))
Vectorpos(SDG,SDHC,2)=Ans
Ans=INT(ABS(GX#)/GX#)
Vectorpos(SDG,SDHC,3)=Ans
Ans=INT(ABS(GY#)/GY#)
Vectorpos(SDG,SDHC,4)=Ans
Ans=INT(ABS(GZ#)/GZ#)
Vectorpos(SDG,SDHC,5)=Ans
next SDHC
next SDG
load bitmap "C:\Documents and Settings\Owner\My Documents\My Pictures\Vash Nmap Small.bmp"
lock pixels
for UUGH =0 to 100
for UUGY =0 to 100
ImageRed(UUGH,UUGY)=RGBR(Point(UUGH,UUGY))
ImageGreen(UUGH,UUGY)=RGBG(Point(UUGH,UUGY))
Next UUGH
Next UUGY
unlock pixels
for LD=0 to 31
for LE=0 to 31
for LF=0 to 31
for LG=0 to 31
rem H$=STR$(32768*LD+1024*LE+32*LF+LG)+" Remaining"
rem text 50,50,H$
xa#=sin(LD*90/32.0)*cos(LE*90/32.0)
ya#=sin(LD*90/32.0)*sin(LE*90/32.0)
za#=cos(LD*90/32.0)
xb#=sin(LF*90/32.0)*cos(LG*90/32.0)
yb#=sin(LF*90/32.0)*sin(LG*90/32.0)
zb#=cos(LF*90/32.0)
xc#=(ya#*zb#)-(yb#*za#)
yc#=(za#*xb#)-(zb#*xa#)
zc#=(xa#*yb#)-(xb#*ya#)
if xc#<0
QA=-1
else
QA=1
endif
if yc#<0
QB=-1
else
QB=1
endif
if zc#<0
QC=-1
else
QC=1
endif
LC#=(xc#^2+yc#^2+zc#^2)^0.5
Theta#=ABS(ATAN(yc#/xc#))
CrossAns(LD,LE,LF,LG,0)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(Abs(zc#/LC#)))
CrossAns(LD,LE,LF,LG,1)=INT((Theta#/90.0)*32)
CrossAns(LD,LE,LF,LG,2)=QA
CrossAns(LD,LE,LF,LG,3)=QB
CrossAns(LD,LE,LF,LG,4)=QC
CrossAns(LD,LE,LF,LG,20)=INT(((xa#*xb#)+(ya#*yb#)+(za#*zb#))*64)
xb#=-1*sin(LF*90/32.0)*cos(LG*90/32.0)
xc#=(ya#*zb#)-(yb#*za#)
yc#=(za#*xb#)-(zb#*xa#)
zc#=(xa#*yb#)-(xb#*ya#)
if xc#<0
QA=-1
else
QA=1
endif
if yc#<0
QB=-1
else
QB=1
endif
if zc#<0
QC=-1
else
QC=1
endif
LC#=(xc#^2+yc#^2+zc#^2)^0.5
Theta#=ABS(ATAN(yc#/xc#))
CrossAns(LD,LE,LF,LG,5)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(Abs(zc#/LC#)))
CrossAns(LD,LE,LF,LG,6)=INT((Theta#/90.0)*32)
CrossAns(LD,LE,LF,LG,7)=QA
CrossAns(LD,LE,LF,LG,8)=QB
CrossAns(LD,LE,LF,LG,9)=QC
CrossAns(LD,LE,LF,LG,21)=INT(((xa#*xb#)+(ya#*yb#)+(za#*zb#))*64)
yb#=-1*sin(LF*90/32.0)*sin(LG*90/32.0)
xc#=(ya#*zb#)-(yb#*za#)
yc#=(za#*xb#)-(zb#*xa#)
zc#=(xa#*yb#)-(xb#*ya#)
if xc#<0
QA=-1
else
QA=1
endif
if yc#<0
QB=-1
else
QB=1
endif
if zc#<0
QC=-1
else
QC=1
endif
LC#=(xc#^2+yc#^2+zc#^2)^0.5
Theta#=ABS(ATAN(yc#/xc#))
CrossAns(LD,LE,LF,LG,10)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(Abs(zc#/LC#)))
CrossAns(LD,LE,LF,LG,11)=INT((Theta#/90.0)*32)
CrossAns(LD,LE,LF,LG,12)=QA
CrossAns(LD,LE,LF,LG,13)=QB
CrossAns(LD,LE,LF,LG,14)=QC
CrossAns(LD,LE,LF,LG,22)=INT(((xa#*xb#)+(ya#*yb#)+(za#*zb#))*64)
zb#=-1*cos(LF*90/32.0)
xc#=(ya#*zb#)-(yb#*za#)
yc#=(za#*xb#)-(zb#*xa#)
zc#=(xa#*yb#)-(xb#*ya#)
if xc#<0
QA=-1
else
QA=1
endif
if yc#<0
QB=-1
else
QB=1
endif
if zc#<0
QC=-1
else
QC=1
endif
LC#=(xc#^2+yc#^2+zc#^2)^0.5
Theta#=ABS(ATAN(yc#/xc#))
CrossAns(LD,LE,LF,LG,15)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(Abs(zc#/LC#)))
CrossAns(LD,LE,LF,LG,16)=INT((Theta#/90.0)*32)
CrossAns(LD,LE,LF,LG,17)=QA
CrossAns(LD,LE,LF,LG,18)=QB
CrossAns(LD,LE,LF,LG,19)=QC
CrossAns(LD,LE,LF,LG,23)=INT(((xa#*xb#)+(ya#*yb#)+(za#*zb#))*64)
Next LD
Next LE
Next LF
Next LG
For SDXC=0 to 31
For SDC=0 to 31
xc#=sin(SDXC*90/32.0)*cos(SDC*90/32.0)
yc#=sin(SDXC*90/32.0)*sin(SDC*90/32.0)
zc#=cos(SDXC*90/32.0)
Theta#=ABS(ATAN(zc#/xc#))
Phizx(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ATAN(xc#/yc#))
Phixy(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ATAN(zc#/yc#))
Phizy(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ATAN(yc#/zc#))
Phiyz(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ATAN(xc#/zc#))
Phixz(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(ABS(xc#)))
Thetax(SDXC,SDC)=INT((Theta#/90.0)*32)
Theta#=ABS(ACOS(ABS(yc#)))
Thetay(SDXC,SDC)=INT((Theta#/90.0)*32)
Next SDXC
Next SDC
rem left is normal map
ThetaGH=0
PhiGH=0
AGH=0
BGH=0
CGH=0
AGY=0
BGY=0
CGY=0
ThetaGY=0
PhiGY=0
NormalPhi=0
NormalTheta=0
NormA=0
NormB=0
NormC=0
CRED=0
CGREEN=0
CBLUE=0
FinalPhi=0
FinalTheta=0
FinalGreen=0
FinalRed=0
FinalBlue=0
LastCountGH=0
LastCountGY=0
if file exist("C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects\NormalMap\importantvalues.txt") then delete file "C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects\NormalMap\importantvalues.txt"
OPEN TO WRITE 1, "C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects\NormalMap\importantvalues.txt"
for CountGH=1 to 100
for CountGY=1 to 100
R1#=Vectorpos(LastCountGH,LastCountGY,2)
Ang2=Vectorpos(LastCountGH,LastCountGY,0)
Ang1=Vectorpos(LastCountGH,LastCountGY,1)
QX=Vectorpos(LastCountGH,LastCountGY,3)
QY=Vectorpos(LastCountGH,LastCountGY,4)
QZ=Vectorpos(LastCountGH,LastCountGY,5)
R2#=Vectorpos(LastCountGH,CountGY,2)
Ang4=Vectorpos(LastCountGH,CountGY,0)
Ang3=Vectorpos(LastCountGH,CountGY,1)
QI=Vectorpos(LastCountGH,CountGY,3)
QJ=Vectorpos(LastCountGH,CountGY,4)
QK=Vectorpos(LastCountGH,CountGY,5)
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="Ang4:"+Str$(Ang4)
Write String 1,hun$
hun$="Ang3:"+Str$(Ang3)
Write String 1,hun$
hun$="R2#:"+Str$(R2#)
Write String 1,hun$
hun$="Ang1:"+Str$(Ang1)
Write String 1,hun$
hun$="Ang2:"+Str$(Ang2)
Write String 1,hun$
hun$="R1#:"+Str$(R1#)
Write String 1,hun$
endif
endif
FindRadiusA()
FindRadiusB()
SinRRatio()
PhiGH=SPhi()
ThetaGH=STheta()
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="PhiGH:"+Str$(PhiGH)
Write String 1,hun$
hun$="ThetaGH:"+Str$(ThetaGH)
Write String 1,hun$
endif
endif
AGH=QA
BGH=QB
CGH=QC
R2#=Vectorpos(CountGH,LastCountGY,2)
Ang4=Vectorpos(CountGH,LastCountGY,0)
Ang3=Vectorpos(CountGH,LastCountGY,1)
QI=Vectorpos(CountGH,LastCountGY,3)
QJ=Vectorpos(CountGH,LastCountGY,4)
QK=Vectorpos(CountGH,LastCountGY,5)
FindRadiusB()
SinRRatio()
PhiGY=SPhi()
ThetaGY=STheta()
AGY=QA
BGY=QB
CGY=QC
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="GYQuadX:"+Str$(AGY)
Write String 1,hun$
hun$="GYQuadY:"+Str$(BGY)
Write String 1,hun$
hun$="GYQuadZ:"+Str$(CGY)
Write String 1,hun$
endif
endif
Ang4=PhiGY
Ang3=ThetaGY
Ang2=PhiGH
Ang1=ThetaGH
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="PhiGY:"+Str$(PhiGY)
Write String 1,hun$
hun$="ThetaGY:"+Str$(ThetaGY)
Write String 1,hun$
endif
endif
QI=QA
QJ=QB
QK=QC
QX=AGH
QY=BGH
QZ=CGH
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="GHQuadX:"+Str$(AGH)
Write String 1,hun$
hun$="GHQuadY:"+Str$(BGH)
Write String 1,hun$
hun$="GHQuadZ:"+Str$(CGH)
Write String 1,hun$
endif
endif
Getcrossproduct()
NormalPhi=CrossPhi
NormalTheta=CrossTheta
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="PhiN:"+Str$(NormalPhi)
Write String 1,hun$
hun$="ThetaN:"+Str$(NormalTheta)
Write String 1,hun$
endif
endif
NormA=QA
NormB=QB
NormC=QC
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="NormX:"+Str$(NormA)
Write String 1,hun$
hun$="NormY:"+Str$(NormB)
Write String 1,hun$
hun$="NormZ:"+Str$(NormC)
Write String 1,hun$
endif
endif
Ang1=CrossTheta
Ang2=CrossPhi
Ang3=ThetaGH
Ang4=PhiGH
QX=NormA
QY=NormB
QZ=NormC
QI=AGH
QJ=BGH
QK=CGH
Getcrossproduct()
R1#=(ImageRed(CountGH,CountGY)-128)
R2#=(ImageGreen(CountGH,CountGY)-128)
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="R1#:"+Str$(R1#)
Write String 1,hun$
hun$="R2#:"+Str$(R2#)
Write String 1,hun$
endif
endif
REM Found Binormal
Ang1=CrossTheta
Ang2=CrossPhi
Ang3=ThetaGH
Ang4=PhiGH
QX=QA
QY=QB
QZ=QC
QI=AGH
QJ=BGH
QK=CGH
FindRadiusB()
SinRRatio()
FinalPhi=SPhi()
FinalTheta=STheta()
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="FinalPhi:"+Str$(FinalPhi)
Write String 1,hun$
hun$="FinalThet:"+Str$(FinalTheta)
Write String 1,hun$
endif
endif
QX=QA
QY=QB
QZ=QC
Ang3=Vectorpos(LastCountGH,LastCountGY,0)
Ang4=Vectorpos(LastCountGH,LastCountGY,1)
QI=Vectorpos(LastCountGH,LastCountGY,3)
QJ=Vectorpos(LastCountGH,LastCountGY,4)
QK=Vectorpos(LastCountGH,LastCountGY,5)
Ang1=FinalTheta
Ang2=FinalPhi
Ang3=Vectorpos(LastCountGH,LastCountGY,0)
Ang4=Vectorpos(LastCountGH,LastCountGY,1)
finddotproduct()
ImageRed(CountGH,CountGY)=LNQ
Ang1=NormalTheta
Ang2=NormalPhi
Ang3=Vectorpos(LastCountGH,LastCountGY,0)
Ang4=Vectorpos(LastCountGH,LastCountGY,1)
QX=NormA
QY=NormB
QZ=NormC
QI=Vectorpos(LastCountGH,LastCountGY,3)
QJ=Vectorpos(LastCountGH,LastCountGY,4)
QK=Vectorpos(LastCountGH,LastCountGY,5)
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="One:"+Str$(LNQ)
Write String 1,hun$
endif
endif
finddotproduct()
ImageGreen(CountGH,CountGY)=LNQ
if ShowThisOneX=CountGH
if ShowThisOneY=CountGY
hun$="Two:"+Str$(LNQ)
Write String 1,hun$
endif
endif
LastCountGH=CountGH
LastCountGY=CountGY
next CountGY
next CountGH
load bitmap "C:\Documents and Settings\Owner\My Documents\My Pictures\Vash Image.bmp"
lock pixels
For CounGH= 0 to 100
For CounGY= 0 to 100
CGREEN=RGBG(Point(CounGH,CounGY))
CRED=RGBR(Point(CounGH,CounGY))
CBLUE=RGBB(Point(CounGH,CounGY))
if ImageGreen(CounGH,CounGY)>0 or ImageGreen(CounGH,CounGY)<0
CGREEN=ImageBlue(CounGH,CounGY)*CBLUE/510
CBLUE=ImageGreen(CounGH,CounGY)*CGREEN/510
CRED=ImageRed(CounGH,CounGY)*CRED/510
else
endif
if CGREEN>255
CGREEN=255
endif
if CGREEN<0
CGREEN=0
endif
if CGRED>255
CRED=255
endif
if CGRED<0
CRED=0
endif
if CGBLUE>255
CBLUE=255
endif
if CGBLUE<0
CBLUE=0
endif
Dot 540+CounGH,CounGY,RGB(CRED,CGREEN,CBLUE)
Next CounGY
Next CounGH
unlock pixels
wait key
wait key
END
function Getcrossproduct()
rem still need to check quadrants
Theta=0
Phi=0
Hold1=Ang1
Hold2=Ang2
Hold3=Ang3
Hold4=Ang4
if (QX=QI)
if (QY=QJ)
if (QZ=QK)
rem swap quadrants and values
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,20)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,1)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,0)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,2)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,3)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,4)
else
Ang2=Phixz(Hold1,Hold2)
Ang1=Thetay(Hold1,Hold2)
Ang4=Phixz(Hold3,Hold4)
Ang3=Thetay(Hold3,Hold4)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,21)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,6)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,5)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,7)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,8)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,9)
endif
else
if (QZ=QK)
Ang2=Phizy(Hold1,Hold2)
Ang1=Thetax(Hold1,Hold2)
Ang4=Phizy(Hold3,Hold4)
Ang3=Thetax(Hold3,Hold4)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,21)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,6)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,5)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,7)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,8)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,9)
else
Ang2=Phizy(Hold1,Hold2)
Ang1=Thetax(Hold1,Hold2)
Ang4=Phizy(Hold3,Hold4)
Ang3=Thetax(Hold3,Hold4)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,22)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,11)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,10)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,12)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,13)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,14)
endif
endif
else
if (QY=QJ)
if (QZ=QK)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,21)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,6)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,5)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,7)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,8)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,9)
else
Ang2=Phixz(Hold1,Hold2)
Ang1=Thetay(Hold1,Hold2)
Ang4=Phixz(Hold3,Hold4)
Ang3=Thetay(Hold3,Hold4)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,22)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,11)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,10)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,12)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,13)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,14)
endif
else
if (QZ=QK)
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,22)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,11)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,10)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,12)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,13)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,14)
else
LNQ=CrossAns(Ang1,Ang2,Ang3,Ang4,23)
Theta=CrossAns(Ang1,Ang2,Ang3,Ang4,16)
Phi=CrossAns(Ang1,Ang2,Ang3,Ang4,15)
QA=CrossAns(Ang1,Ang2,Ang3,Ang4,17)
QB=CrossAns(Ang1,Ang2,Ang3,Ang4,18)
QC=CrossAns(Ang1,Ang2,Ang3,Ang4,19)
endif
endif
endif
Ang1=Hold1
Ang2=Hold2
Ang3=Hold3
Ang4=Hold4
rem Type=2
rem QX=1
rem QZ=1
rem QY=change
rem Ans=Quadrant -x,y changes based on {x,y},z
rem QX=change
CrossPhi=Phi
CrossTheta=Theta
if CrossPhi<1
CrossPhi=0
endif
if CrossTheta<1
CrossTheta=0
endif
if CrossPhi>31
CrossPhi=0
endif
if CrossTheta>31
CrossTheta=0
endif
endfunction
function SinRRatio()
RSratio#=R2#*Sin(90.0*Ang3/32)/R1#
endFunction
Function SPhi()
rem in the future call x and y when the object is read to the cache.
rem put into an array in x and y later where x and y keep sign
IF QX*sin(bitang(Ang1))*cos(bitang(ang2))>QI*sin(bitang(Ang3))*cos(bitang(ang4))
QA=1
else
QA=-1
endif
IF QY*sin(bitang(Ang1))*sin(bitang(ang2))>QJ*sin(bitang(Ang3))*sin(bitang(ang4))
QB=1
else
QB=-1
endif
ANS=INT(ATAN(((RSratio#/Sin(bitang(Ang1)))*sin(90.0*Ang4/32)-sin(90.0*Ang2/32))/((RSratio#/sin(bitang(Ang1))*cos(90.0*Ang4/32)-cos(90.0*Ang2/32))))/90*32)
if ANS>0 and ANS<130
ANS=ANS%%32
else
ANS=0
endif
endfunction ANS
Function SUnitPhi()
rem put into an array in x and y later where x and y keep sign
IF QX*sin(bitang(Ang1))*cos(bitang(ang2))>QI*sin(bitang(Ang3))*cos(bitang(ang4))
QA=1
else
QA=-1
endif
IF QY*sin(bitang(Ang1))*sin(bitang(ang2))>QJ*sin(bitang(Ang3))*sin(bitang(ang4))
QB=1
else
QB=-1
endif
ANS=INT(ATAN(((sin(90.0*Ang1/32)*(sin(90.0*Ang2/32))-(sin(90.0*Ang3/32)*sin(90.0*Ang4/32))))/((sin(Ang1/32*90.0)*(cos(90.0*Ang2/32))-(cos(90.0*Ang4/32)*sin(90.0*Ang3/32)))))/90.0*32)
if ANS>0 and ANS<130
ANS=ANS%%32
else
ANS=0
endif
endfunction ANS
Function SUnitTheta()
if CrossAns(Ang1,Ang2,0,0,20)>CrossAns(Ang3,Ang4,0,0,20)
QC=-1
else
QC=1
endif
ANS=INT(32/90.0*ACOS(ABS(cos(bitang(Ang2))-cos(bitang(Ang4))/(2-2*(sin(bitang(Ang1))*cos(bitang(Ang2))*sin(bitang(Ang3))*cos(bitang(Ang4))+sin(bitang(Ang1))*sin(bitang(Ang2))*sin(bitang(Ang3))*sin(bitang(Ang4))+cos(bitang(Ang1))*cos(bitang(Ang3)))))))
if ANS>0 and ANS<130
ANS=ANS%%32
else
ANS=0
endif
endfunction ANS
rem hh
Function STheta()
finddotproduct()
Zdiff#=(RSratio#/SQRT(ABS(SIN(bitang(Ang3))))*COS(bitang(Ang2)*QK))-(SQRT(ABS(SIN(bitang(Ang3)))))*QZ*COS(bitang(Ang4))
rem RSratio should equal R2#Sin3/R1#
if ZDiff<0
QC=-1
else
QC=1
endif
ANS=INT(32/90.0*ACOS(ABS(Zdiff#)/sqrt(ABS((sin(bitang(Ang3))+((RSratio#*RSratio#)/Sin(bitang(Ang3)))-(2*RSratio#*(LNQ*64)))))))
if ANS>0 and ANS<130
ANS=ANS%%32
else
ANS=0
endif
endfunction ANS
function ln(x#)
rem calculate Hn
Hold#=0
for n#=1.00 to x#
Harm#=1.00/n#
Hold#=Harm#+Hold#
next n#
rem approximate Hn-ln n
Gamma#=.5772156
AppError#=1/(2*x#)
Gamman#=Gamma#+AppError#
rem Subtract Hn-gamma
Lnx#=Hold#-Gamman#
endfunction Lnx#
function FindRadiusA()
R1#=INT(exp(0.104360*R1#))
endfunction
function FindRadiusB()
R2#=INT(exp(0.104360*R2#))
endfunction
function bitang(a)
Ans#=90.0*a/32
endfunction Ans#
function finddotproduct()
rem for final include swap in object
Ang1=INT(Ang1)
Ang2=INT(Ang2)
Ang3=INT(Ang3)
Ang4=INT(Ang4)
Hold1=Ang1
Hold2=Ang2
Hold3=Ang3
Hold4=Ang4
If Ang1<32 and Ang1>-1
else
Ang1=0
endif
If Ang2<32 and Ang2>-1
else
Ang2=0
endif
If Ang3<32 and Ang3>-1
else
Ang3=0
endif
If Ang4<32 and Ang4>-1
else
Ang4=0
endif
if (QX=QI)
if (QY=QJ)
if (QZ=QK)
rem swap quadrants and values
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,20)
else
Hold2=Phixz(Ang1,Ang2)
Hold1=Thetay(Ang1,Ang2)
Hold4=Phixz(Ang3,Ang4)
Hold3=Thetay(Ang3,Ang4)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,21)
endif
else
if (QZ=QK)
Hold2=Phizy(Ang1,Ang2)
Hold1=Thetax(Ang1,Ang2)
Hold4=Phizy(Ang3,Ang4)
Hold3=Thetax(Ang3,Ang4)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,21)
else
Hold2=Phizy(Ang1,Ang2)
Hold1=Thetax(Ang1,Ang2)
Hold4=Phizy(Ang3,Ang4)
Hold3=Thetax(Ang3,Ang4)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,22)
endif
endif
else
if (QY=QJ)
if (QZ=QK)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,21)
else
Hold2=Phixz(Ang1,Ang2)
Hold1=Thetay(Ang1,Ang2)
Hold4=Phixz(Ang3,Ang4)
Hold3=Thetay(Ang3,Ang4)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,22)
endif
else
if (QZ=QK)
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,22)
else
LNQ=CrossAns(Hold1,Hold2,Hold3,Hold4,23)
endif
endif
endif
endfunction
XXX