# Creating 'Conic Projections'.

I take a suitable image, and create a grey-scale version, then re-map it so it will look correct when viewed as a 3D cone when seen face-on, and distorted by various amounts from other directions.
```global pi
pi =3.14159265

WindowWidth  =810
WindowHeight =638

graphicbox #w.gb 2, 2, 200, 200

nomainwin

open "Inverse circle image" for graphics_nsb_nf as #w

#w "trapclose [quit]"

#w.gb "down ; fill black ; size 2"

handleg  =hwnd( #w.gb)
calldll  #user32, "GetDC", handleg as ulong, hDC as ulong

#w.gb   "down"
image\$ ="circle6.bmp"
loadbmp "target", image\$
#w.gb   "drawbmp target 0 0 ; flush ; size 2"

for y =0 to 200 step 1
for x =201 to 600 step 1
radius       =( ( x -400)^2 +( 200 -y)^2)^0.5
if ( x =400) and ( y =200) then [skip]

theta        =ATAN2( y -100, x -300)
thetaNew     =theta /2
xx           =int( 100 +radius *cos( thetaNew))
yy           =int( 100 +radius *sin( thetaNew))

calldll #gdi32, "GetPixel", hDC as ulong, xx as long, yy as long, pixcol as ulong
bl = int(  pixcol /( 256*256)): gr = int( (pixcol -bl *256*256) / 256): re = int(  pixcol -bl *256*256 -gr *256)

#w.gb "color "; str\$( re) +" " +str\$( gr) +" " +str\$( bl)
#w.gb "set "; int( xx); " "; 600 -int( yy)

scan
[skip]
next x
next y

#w.gb   "flush"
#w.gb   "getbmp scr 0 0 600 600"
bmpsave "scr", word\$( image\$, 1, ".") +"Invd.bmp"

wait

[quit]
callDll #user32, "ReleaseDC", handleg as ulong, hDC as ulong, result as ushort
close #w
end

function ATAN2( y, x)
pi = atn( 1 ) *4
Result\$ = "Undetermined"
If ( x =0) and ( y >0) then ATAN2 = pi /2:      Result\$ ="Determined"
if ( x =0) and ( y <0) then ATAN2 =3 * pi /2:   Result\$ ="Determined"
if ( x >0) and ( y =0) then ATAN2 =0:           Result\$ ="Determined"
if ( x <0) and ( y =0) then ATAN2 =pi:          Result\$ ="Determined"

If Result\$ <>"Determined" then
BaseAngle =ATN( abs( y) /abs( x))
If ( x >0) and ( y >0) then ATAN2 =       BaseAngle
If ( x <0) and ( y >0) then ATAN2 = pi   -BaseAngle
If ( x <0) and ( y <0) then ATAN2 = pi   +BaseAngle
If ( x >0) and ( y <0) then ATAN2 = 2*pi -BaseAngle
end if
End Function
```