print "good"
wait key
#Constant DEF=100
Global DIM ImageRed(DEF,DEF)
Global DIM ImageGreen(DEF,DEF)
Global DIM ImageRRR(DEF,DEF)
Global DIM ImageBBB(DEF,DEF)
Global DIM ImageGGG(DEF,DEF)
load bitmap "C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects\NMAP2\Vash Nmap Small.bmp",
lock pixels
for UUGH =1 to 100
for UUGY =1 to 100
ImageRed(UUGH,UUGY)=RGBR(Point(UUGH,UUGY))
ImageGreen(UUGH,UUGY)=RGBG(Point(UUGH,UUGY))
Next UUGH
Next UUGY
unlock pixels
cls
load bitmap "C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects\NMAP2\Vash Image.bmp"
lock pixels
for UUGH =1 to 100
for UUGY =1 to 100
ImageBBB(UUGH,UUGY)=RGBB(Point(UUGH,UUGY))
ImageRRR(UUGH,UUGY)=RGBR(Point(UUGH,UUGY))
ImageGGG(UUGH,UUGY)=RGBG(Point(UUGH,UUGY))
Next UUGH
Next UUGY
unlock pixels
wait key
LightX=13
LightY=0
LightZ=0
#Constant ROWA=100
#Constant COLA=100
#Constant LowPercision=16
#Constant B32Q=32
#Constant B64Q=64
#Constant B256Q=256
#Constant RatioPercision=64
#Constant 2DQUAD=4
#Constant 1DQUAD=2
#Constant Def=100
global AngDif
global Ang1,Ang2,Ang3,Ang4
global PAng2,PAng4,ISMORE
global QX,QY,QZ,QI,QJ,QK,QA,QB,QC
global Rratio,SinCosQ,SinratioQQQ
global R1,R2
Make object sphere 1,10,ROWA,COLA
lock vertexdata for limb 1,0,2
CDd=GET VERTEXDATA INDEX COUNT()
global DIM NORMALSQ(CDd,5)
global DIM BINORMALSQ(CDd,6)
Global DIM TANGENTSQ(CDd,6)
Global DIM SolvePhi(B32Q,B32Q,1DQUAD,1DQUAD,RatioPercision,2DQUAD)
Global DIM SolveTheta(B64Q,B64Q,LowPercision,RatioPercision,2DQUAD)
Global DIM ImageBlue(DEF,DEF)
Global DIM FindNormalTexture(RatioPercision,RatioPercision,B256Q)
Global DIM SinRatioQ(B64Q,B64Q,B64Q)
Global DIM RRatioQ(B256Q,B256Q)
Global DIM DotProduct(B64Q,B64Q,LowPercision,2DQUAD)
POW#=87.0/39.0
for MAC=0 to B256Q-1
for UBTU=0 to 63
for PHIAVER=0 to 63
rem Can get negative and positive from manipulating the angle
if UBTU=31
FindNormalTexture(PHIAVER,UBTU,MAC)=0
else
rem FindNormalTexture(PHIAVER,UBTU,MAC)=INT((PHIAVER-31)*MAC/(UBTU-31))
FindNormalTexture(PHIAVER,UBTU,MAC)=INT((PHIAVER-31)*MAC/(UBTU-31))
endif
Next PHIAVER
Next MAC
Next UBTU
FOR GAA=0 to B32Q-1
FOR GBB=0 to B32Q-1
FOR PGC=0 to 1
FOR PGD=0 to 1
FOR GCC=0 to RatioPercision
if (GCC^(POW#)*COS((2*GAA+PGC)*90/64)-COS((2*GBB+PGD)*90/64))>0 or (GCC^(POW#)*COS((2*GAA+PGC)*90/64)-COS((2*GBB+PGD)*90/64))<0
ANSA=INT(64/90.0*ATAN((GCC^(POW#)*SIN((2*GAA+PGC)*90/64)-SIN((2*GBB+PGD)*90/64))/(GCC^(POW#)*COS((2*GAA+PGC)*90/64)-COS((2*GBB+PGD)*90/64))))
ANSB=INT(64/90.0*ATAN((GCC^(POW#)*SIN((2*GAA+PGC)*90/64)+SIN((2*GBB+PGD)*90/64))/(GCC^(POW#)*COS((2*GAA+PGC)*90/64)-COS((2*GBB+PGD)*90/64))))
else
ANSB=0
ANSA=0
endif
if (GCC^(POW#)*COS((2*GAA+PGC)*90/64)+COS((2*GBB+PGD)*90/64))>0 or (GCC^(POW#)*COS((2*GAA+PGC)*90/64)+COS((2*GBB+PGD)*90/64))<0
ANSC=INT(64/90.0*ATAN((GCC^(POW#)*SIN((2*GAA+PGC)*90/64)-SIN((2*GBB+PGD)*90/64))/(GCC^(POW#)*COS((2*GAA+PGC)*90/64)+COS((2*GBB+PGD)*90/64))))
ANSD=INT(64/90.0*ATAN((GCC^(POW#)*SIN((2*GAA+PGC)*90/64)+SIN((2*GBB+PGD)*90/64))/(GCC^(POW#)*COS((2*GAA+PGC)*90/64)+COS((2*GBB+PGD)*90/64))))
else
ANSB=0
ANSA=0
endif
IF ANSA=64
ANSA=0
else
SolvePhi(GAA,GBB,PGC,PGD,GCC,0)=ANSA
endif
IF ANSB=64
ANSB=0
else
SolvePhi(GAA,GBB,PGC,PGD,GCC,1)=ANSB
endif
IF ANSC=64
ANSC=0
else
SolvePhi(GAA,GBB,PGC,PGD,GCC,2)=ANSC
endif
IF ANSD=64
ANSD=0
else
SolvePhi(GAA,GBB,PGC,PGD,GCC,3)=ANSD
endif
Next GCC
Next PGD
Next PGC
Next GBB
Next GAA
for QA=0 to B64Q-1
for QB=0 to B64Q-1
for QC=0 to B64Q-1
for QD=0 to LowPercision-1
DotProduct(QB,QC,QD,0)=INT(31*(sin(bitang(QB))*sin(bitang(QC))*cos(QD*90/16.0)+cos(bitang(QB))*cos(bitang(QC)))+31)
DotProduct(QB,QC,QD,1)=INT(31*(sin(bitang(QB))*sin(bitang(QC))*cos(QD*90/16.0)-cos(bitang(QB))*cos(bitang(QC)))+31)
DotProduct(QB,QC,QD,2)=INT(31*(-sin(bitang(QB))*sin(bitang(QC))*cos(QD*90/16.0)+cos(bitang(QB))*cos(bitang(QC)))+31)
DotProduct(QB,QC,QD,3)=INT(31*(-sin(bitang(QB))*sin(bitang(QC))*cos(QD*90/16.0)-cos(bitang(QB))*cos(bitang(QC)))+31)
if sqrt(16*QC^2+1-(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))>0
SolveTheta(QA,QB,QD,QC,0)=INT(64/90.0*ACOS(4*QC*cos(90/64.0*QA)-cos(90/64.0*QB)/sqrt(16*QC^2+1-(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))))
SolveTheta(QA,QB,QD,QC,1)=INT(64/90.0*ACOS(4*QC*cos(90/64.0*QA)+cos(90/64.0*QB)/sqrt(16*QC^2+1-(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))))
ELSE
SolveTheta(QA,QB,QD,QC,1)=0
SolveTheta(QA,QB,QD,QC,0)=0
endif
if sqrt(16*QC^2+1+(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))>0
SolveTheta(QA,QB,QD,QC,2)=INT(64/90.0*ACOS(4*QC*cos(90/64.0*QA)-cos(90/64.0*QB)/sqrt(16*QC^2+1+(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))))
SolveTheta(QA,QB,QD,QC,3)=INT(64/90.0*ACOS(4*QC*cos(90/64.0*QA)+cos(90/64.0*QB)/sqrt(16*QC^2+1+(8*QC*sin(90/64.0*QA)*sin(90/64.0*QB)*cos(90/16.0*QD)+cos(90/64.0*QA)*cos(90/64.0*QB)))))
else
SolveTheta(QA,QB,QD,QC,2)=0
SolveTheta(QA,QB,QD,QC,3)=0
endif
next QA
next QB
next QC
next QD
for PC3=0 to B64Q-1
for MAC3=0 to B64Q-1
for UBTU3=0 to B64Q-1
if MAC3=0
ANS#=64
else
ANS#=SIN(bitang(PC3))/SIN(bitang(MAC3))*4*UBTU3
if ANS#<1
if ANS#>0 or ANS#<0
ANS#=-1/ANS#
endif
endif
endif
SinRatioQ(PC3,MAC3,UBTU3)=INT((ANS#^(POW#)))
next UBTU3
next MAC3
next PC3
for PC=0 to B256Q-1
for MAC=0 to B256Q-1
IF MAC>0
RRatioQ(PC,MAC)=INT((PC/MAC)/4.0)
ELSE
RRatioQ(PC,MAC)=255
ENDIF
next MAC
next PC
for t = 0 to CDd-1
XX=GET VERTEXDATA NORMALS X (1)
YY=GET VERTEXDATA NORMALS Y (1)
ZZ=GET VERTEXDATA NORMALS Z (1)
if XX=0
NORMALSQ(t,0)=0
else
NORMALSQ(t,0)=ATAN(ABS(YY/XX))/90*64
endif
if ZZ=0
NORMALSQ(t,1)=0
else
NORMALSQ(t,1)=ATAN(ABS(YY^2+XX^2/ZZ))/90*64
endif
if XX=0
NORMALSQ(t,2)=1
else
NORMALSQ(t,2)=XX/ABS(XX)
endif
if YY=0
NORMALSQ(t,3)=1
else
NORMALSQ(t,3)=YY/ABS(YY)
endif
if ZZ=0
NORMALSQ(t,4)=1
else
NORMALSQ(t,4)=ZZ/ABS(ZZ)
endif
if NORMALSQ(t,0)>0
BinormalSQ(t,0)=64-NORMALSQ(t,0)
TangentSQ(t,0)=NORMALSQ(t,0)
else
BinormalSQ(t,0)=0
TangentSQ(t,0)=NORMALSQ(t,0)
endif
if NORMALSQ(t,1)>0
TangentSQ(t,1)=(64-NORMALSQ(t,1))/2
BinormalSQ(t,1)=NORMALSQ(t,1)/2
TangentSQ(t,5)=((64-NORMALSQ(t,1))/2)%%2
BinormalSQ(t,5)=(NORMALSQ(t,1)/2)%%2
else
TangentSQ(t,1)=0
BinormalSQ(t,1)=(NORMALSQ(t,1)/2)
TangentSQ(t,5)=0
BinormalSQ(t,5)=(NORMALSQ(t,1)/2)%%2
endif
if NORMALSQ(t,4)=NORMALSQ(t,3)*NORMALSQ(t,2)
TangentSQ(t,2)=NORMALSQ(t,2)
TangentSQ(t,3)=NORMALSQ(t,3)
TangentSQ(t,4)=-NORMALSQ(t,4)
else
if NORMALSQ(t,3)=NORMALSQ(t,2)
TangentSQ(t,2)=-NORMALSQ(t,2)
TangentSQ(t,3)=NORMALSQ(t,3)
TangentSQ(t,4)=NORMALSQ(t,4)
else
TangentSQ(t,2)=NORMALSQ(t,2)
TangentSQ(t,3)=-NORMALSQ(t,3)
TangentSQ(t,4)=NORMALSQ(t,4)
endif
endif
if NORMALSQ(t,2)=NORMALSQ(t,3)
BinormalSQ(t,2)=-NORMALSQ(t,2)
BinormalSQ(t,3)=NORMALSQ(t,3)
BinormalSQ(t,4)=NORMALSQ(t,4)
else
BinormalSQ(t,2)=NORMALSQ(t,2)
BinormalSQ(t,3)=-NORMALSQ(t,3)
BinormalSQ(t,4)=NORMALSQ(t,4)
endif
rem Quadrant=(NORMALSQ(t,2)+1)/2+(NORMALSQ(t,3)+1)+((NORMALSQ(t,4)+1)*2)
next t
VMAX=GET VERTEXDATA VERTEX COUNT()
Global DIM Position(VMAX,6)
for t = 0 to VMAX-1
GX#=LightX-get vertexdata position x(t)
GY#=LightY-get vertexdata position y(t)
GZ#=LightZ-get vertexdata position z(t)
RTY#=sqrt(GX#^2+GY#^2+GZ#^2)
Ans=INT(ABS((ATAN(GY#/GX#)/90.0)*256.0))
Position(t,0)=Ans
Ans=INT(ABS(ACOS(ABS(GZ#/RTY#))/90.0*256.0))
Position(t,1)=Ans
Ans=INT(ABS(RTY#))
Position(t,2)=Ans
Ans=INT(ABS(GX#)/GX#)
Position(t,3)=Ans
Ans=INT(ABS(GY#)/GY#)
Position(t,4)=Ans
Ans=INT(ABS(GZ#)/GZ#)
Position(t,5)=Ans
next t
unlock vertexdata
rem Normal Map Begins
LastCountGH=0
LastCountGY=0
countmm=0
for CountGY = 0 to DEF-1
for CountGH = 0 to DEF-1
R1=(ImageRed(CountGH,CountGY))
R2=(ImageGreen(CountGH,CountGY))
if countmm<CDd
PAng4=TANGENTSQ(countmm,5)
PAng2=BINORMALSQ(countmm,5)
Ang1=BINORMALSQ(countmm,0)
Ang2=BINORMALSQ(countmm,1)
Ang3=TANGENTSQ(countmm,0)
Ang4=TANGENTSQ(countmm,1)
QX=BINORMALSQ(countmm,2)
QY=BINORMALSQ(countmm,3)
QZ=BINORMALSQ(countmm,4)
QI=TANGENTSQ(countmm,2)
QJ=TANGENTSQ(countmm,3)
QK=TANGENTSQ(countmm,4)
endif
SinRRatio()
FinalPhi=SPhi()
FinalTheta=STheta()
QX=QA
QY=QB
QZ=QC
if countmm<VMAX+1
QI=Position(countmm,3)
QJ=Position(countmm,4)
QK=Position(countmm,5)
else
QI=1
QJ=1
QK=1
endif
Ang1=FinalTheta
Ang2=FinalPhi
if countmm<VMAX+1
Ang3=Position(countmm,0)
Ang4=Position(countmm,1)
else
Ang3=0
Ang4=0
endif
finddotproduct()
ImageRed(CountGH,CountGY)=SinCosQ
Ang1=NormalTheta
Ang2=NormalPhi
if countmm<VMAX+1
Ang3=Position(countmm,0)
Ang4=Position(countmm,1)
endif
QX=NormA
QY=NormB
QZ=NormC
if countmm<VMAX+1
QI=Position(countmm,3)
QJ=Position(countmm,4)
QK=Position(countmm,5)
endif
finddotproduct()
ImageGreen(CountGH,CountGY)=SinCosQ
LastCountGH=CountGH
LastCountGY=CountGY
countmm=countmm+1
next CountGY
next CountGH
LastGreen=1
cls
For CounGH= 0 to 100
For CounGY= 0 to 100
if ImageGreen>0 then LastGreen=ImageGreen(CounGH,CounGY)
if ImageGreen(CounGH,CounGY)>0
if ImageRed(CounGH,CounGY)>63 then ImageRed(CounGH,CounGY)=63
if ImageGreen(CounGH,CounGY)>63 then ImageGreen(CounGH,CounGY)=63
if ImageRed(CounGH,CounGY)<0 then ImageRed(CounGH,CounGY)=0
CGREEN=FindNormalTexture(ImageRed(CounGH,CounGY),ImageGreen(CounGH,CounGY),ImageGGG(CounGH,CounGY))
CBLUE=FindNormalTexture(ImageRed(CounGH,CounGY),ImageGreen(CounGH,CounGY),ImageBBB(CounGH,CounGY))
CRED=FindNormalTexture(ImageRed(CounGH,CounGY),ImageGreen(CounGH,CounGY),ImageRRR(CounGH,CounGY))
else
qq=LastGreen
CGREEN=FindNormalTexture(ImageRed(CounGH,CounGY),qq,ImageGGG(CounGH,CounGY))
CBLUE=FindNormalTexture(ImageRed(CounGH,CounGY),qq,ImageBBB(CounGH,CounGY))
CRED=FindNormalTexture(ImageRed(CounGH,CounGY),qq,ImageRRR(CounGH,CounGY))
endif
if CGREEN>255
CGREEN=255
endif
if CGREEN<0
CGREEN=0
endif
if CRED>255
CRED=255
endif
if CRED<0
CRED=0
endif
if CBLUE>255
CBLUE=255
endif
if CBLUE<0
CBLUE=0
endif
ImageRed(CounGH,CounGY)=CRED
ImageBlue(CounGH,CounGY)=CBLUE
ImageGreen(CounGH,CounGY)=CGREEN
Next CounGY
Next CounGH
draw to front
lock pixels
for y=1 to 100
for x=1 to 100
dot x,y,RGB(ImageRed(x,y),ImageGreen(x,y),ImageRed(x,y))
next x
next y
unlock pixels
get image 7,0,0,100,100
wait key
Texture object 1,7
tdf=0
do
tdf=tdf+1
position camera 10.0*cos(tdf),1,10.0*sin(tdf)
remstart
if MouseY()<200
zrotate camera -90
move camera 1
Point camera 0,0,0
endif
if MouseY()>280
zrotate camera 90
move camera 1
Point camera 0,0,0
endif
if MouseX()<240
yrotate camera -90
move camera 1
Point camera 0,0,0
endif
if MouseX()>400
yrotate camera 90
move camera 1
Point camera 0,0,0
endif
sync
Wait 5
remend
wait 10
Point camera 0,0,0
loop
function SinRRatio()
REM IF STATEMENTS CAN BE REMOVED JUST FOR SAFETY IN CASE I MADE ERRORS WITH ARRAYS
if Ang4>32 or Ang4<0
Ang4=0
endif
if Ang3>64 or Ang3<0
Ang3=0
endif
if Ang2>32 or Ang2<0
Ang2=0
endif
if Ang1>64 or Ang1<0
Ang1=0
endif
REM IF STATEMENTS CAN BE REMOVED JUST FOR SAFETY IN CASE I MADE ERRORS WITH ARRAYS
REM will handle Rratio like SINRratio in final version checking if negative and reading 6 bit value.
if R1>256 then R1=256
if R1<0 then R1=0
if R2>256 then R2=256
if R2<0 then R2=0
Rratio=RRatioQ(R1,R2)
if Rratio<0 then Rratio=0
if Rratio>63 then Rratio=63
Remstart
TEVOP
(d-a)+0*scale
d=TangentPhi a=BinormalPhi (1=PI so 20*=2/9) c=0 b=0 tevbias=0 tevscale=.5
Remend
REM IF STATEMENTS CAN BE CHANGED TO ARRAYS AND SIMPLER STATEMENTS LATER
If QY=QJ and QX=QI
AngDif=ABS(Ang2-Ang4)/2
else
AngDif=ABS(Ang2+Ang4)/2
If AngDif>32
AngDif=64-AngDif
ISMORE=1
else
ISMORE=0
endif
endif
REM 1 TEV STAGE and 1 Read from memory(32Gigafiles/s due to small size)
SinratioQQQ=SinRatioQ(Ang1,Ang3,Rratio)
endFunction
function bitang(a)
Ans#=90.0*a/64.0
endfunction Ans#
Function STheta()
REM IF STATEMENTS CAN BE REMOVED JUST FOR SAFETY IN CASE I MADE ERRORS WITH ARRAYS
if Ang4>32 or Ang4<0
Ang4=0
endif
if Ang3>64 or Ang3<0
Ang3=0
endif
if Ang2>32 or Ang2<0
Ang2=0
endif
if Ang1>64 or Ang1<0
Ang1=0
endif
Rem If statements
Rem If statements
REM BOOLEAN FOR Rratio can also can be accounted for.
REM IF STATEMENTS LATER CONVERTED TO 1 ARRAY ADRESS READ to find quadrant value
REM THEN
Remstart
check depending on sign if
Q2>Q1cos(AngDif)*tan(Ang1)tan(Ang3) [yy+zz>xx]
Q2>Q1cos(AngDif)*-tan(Ang1)tan(Ang3) [xx+zz>yy]
Q1cos(AngDif)tan(Ang1)tan(Ang3)>Q2 [xx+yy>zz]
REMEMBER to switch depending on sign of Q2.
REMEMBER YOU CAN USE ARRAYS TO FIND SIGN OF BOOLEAN FIRST
Remend
REM IF STATEMENTS LATER CONVERTED TO 1 ARRAY ADRESS READ from array and 1 If statement
if QX=QI
if QY=QJ
If QZ=QK
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
endif
else
rem if QX*QY*QI*QJ*cos(AngDif)tan(Ang1)tan(Ang3)>QZ*QK
if cos(AngDif)*tan(Ang1)*tan(Ang3)>-1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
endif
else
if (QZ=-1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
endif
endif
else
If QZ=QK
if cos(AngDif)*tan(Ang1)*tan(Ang3)<1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
endif
else
if (QZ=-1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
endif
else
if -1*cos(AngDif)*tan(Ang1)*tan(Ang3)>-1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
else
if (QZ=-1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
endif
endif
endif
endif
else
if QY=QJ
If QZ=QK
if QX*QY*QI*QJ*cos(AngDif)*tan(Ang1)*tan(Ang3)<1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
endif
else
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
endif
else
if -1*cos(AngDif)*tan(Ang1)*tan(Ang3)<-1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
else
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
endif
endif
endif
else
If QZ=QK
if cos(AngDif)*tan(Ang1)*tan(Ang3)>1
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
else
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,1)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,0)
endif
endif
else
if (QZ=1)
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,2)
else
ANS=SolveTheta(Ang1,Ang3,AngDif,RatioPercision,3)
endif
endif
endif
endif
QC=1
rem (QX*QIX QY*QJY) QZ*QK ZZ
REM check later for 1/Rratio
REM IF STATEMENTS LATER CONVERTED TO 1 BOOLEAN READ from array and 1 If statement
if (QZ=QK)
if QZ=1 and cos(bitang(Ang1))<Rratio*cos(bitang(Ang3))
QC=-1
endif
if QZ=-1 and cos(bitang(Ang1))>Rratio*cos(bitang(Ang3))
QC=-1
endif
else
if QZ=-1
QC=-1
endif
endif
endfunction ANS
Function SPhi()
REM IF STATEMENTS CAN BE REMOVED JUST FOR SAFETY IN CASE I MADE ERRORS WITH ARRAYS
if Ang4>32 or Ang4<0
Ang4=0
endif
if Ang3>64 or Ang3<0
Ang3=0
endif
if Ang2>32 or Ang2<0
Ang2=0
endif
if Ang1>64 or Ang1<0
Ang1=0
endif
REM IF STATEMENTS LATER CONVERTED TO 1 BOOLEAN READ from array and 1 If statement
REM BOOLEAN FOR Rratio can also can be accounted for.
if SinratioQQQ>63
SinratioQQQ=63
endif
if SinratioQQQ<-63
SinratioQQQ=0
endif
if SinratioQQQ>0
if (QX=QI)
if (QY=QJ)
ANS=SolvePhi(Ang2,Ang4,PAng2,PAng4,SinratioQQQ,0)
else
ANS=SolvePhi(Ang2,Ang4,PAng2,PAng4,SinratioQQQ,3)
endif
else
if (QY=QJ)
ANS=SolvePhi(Ang2,Ang4,PAng2,PAng4,SinratioQQQ,1)
else
ANS=SolvePhi(Ang2,Ang4,PAng2,PAng4,SinratioQQQ,2)
endif
endif
else
ABSOLUTESIN=ABS(SinratioQQQ)
if (QX=QI)
if (QY=QJ)
ANS=SolvePhi(Ang4,Ang2,PAng4,PAng2,ABSOLUTESIN,0)
else
ANS=SolvePhi(Ang4,Ang2,PAng4,PAng2,ABSOLUTESIN,3)
endif
else
if (QY=QJ)
ANS=SolvePhi(Ang4,Ang2,PAng4,PAng2,ABSOLUTESIN,1)
else
ANS=SolvePhi(Ang4,Ang2,PAng4,PAng2,ABSOLUTESIN,2)
endif
endif
endif
REM IF STATEMENTS LATER CONVERTED TO ANGLE READ from array
If (QX=-1)
if (QY=1)
ANS=64-ANS
endif
else
If (QY=-1)
ANS=64-ANS
endif
endif
QB=1
REM IF STATEMENTS LATER CONVERTED TO 1 BOOLEAN READ from array
if (QY=QJ)
if QY=1 and R1*sin(bitang(Ang1))*sin(bitang(Ang2))<R2*sin(bitang(Ang3))*sin(bitang(Ang4))
QB=-1
endif
if QY=-1 and R1*sin(bitang(Ang1))*sin(bitang(Ang2))>R2*sin(bitang(Ang3))*sin(bitang(Ang4))
QB=-1
endif
else
if QY=-1
QB=-1
endif
endif
QA=1
REM IF STATEMENTS LATER CONVERTED TO 1 BOOLEAN READ from array
if (QX=QI)
if QX=1 and R1*sin(bitang(Ang1))*cos(bitang(Ang2))<R2*sin(bitang(Ang3))*cos(bitang(Ang4))
QA=-1
endif
if QX=-1 and R1*sin(bitang(Ang1))*cos(bitang(Ang2))>R2*sin(bitang(Ang3))*cos(bitang(Ang4))
QA=-1
endif
else
if QX=-1
QA=-1
endif
endif
endfunction ANS
function finddotproduct()
REM IF STATEMENTS CAN BE REMOVED JUST FOR SAFETY IN CASE I MADE ERRORS WITH ARRAYS
if Ang4>32 or Ang4<0
Ang4=0
endif
if Ang3>64 or Ang3<0
Ang3=0
endif
if Ang2>32 or Ang2<0
Ang2=0
endif
if Ang1>64 or Ang1<0
Ang1=0
endif
AngDif=ABS(Ang2-Ang4)
IF QX*QY=QI*QJ
if QZ=QK
SincosQ=DotProduct(Ang1,Ang3,AngDif,0)
else
SincosQ=DotProduct(Ang1,Ang3,AngDif,1)
endif
else
if QZ=QK
SincosQ=DotProduct(Ang1,Ang3,AngDif,2)
else
SincosQ=DotProduct(Ang1,Ang3,AngDif,3)
endif
endif
endfunction
XXX