Ongelman laajuus: Liian iso
Mahd. syitä: -
Ongelman havainnoillistaminen: Aja alemman listauksen koodi
Funktiot:
Code: Select all
///////////////////////////////
//Polaarikoordinaattifunktiot//
// FVD-YHTEENSOPIVA! //
///////////////////////////////
//Polaarikoordinaattijärjestelmän avulla on helpompi esittää
//ympyröihin liittyviä... Juttuja. Koordinaatisto nimittäin
//ei olekaan enää X ja Y, vaan R ja T (Säde ja kiertokulma).
//Esimerkiksi samalla R:n arvolla, mutta eri T:n arvolla voidaan
//piirtää kaari.
//Nimi: Polar2X
//Kuvaus: Muuttaa polaarikoordinaatin tavalliseksi x-koordinaatiksi
//Parametrit: Integer _r, Integer _t
// _r | Etäisyys keskipisteestä (vastaava, kuin ympyrän säde)
// _t | Keskuskulma
Function Polar2X( _r#, _t# )
Return _r * Cos( _t )
EndFunction
//Nimi: Polar2Y
//Kuvaus: Muuttaa polaarikoordinaatin tavalliseksi y-koordinaatiksi
//Parametrit: Integer _r, Integer _t
// _r | Etäisyys keskipisteestä (vastaava, kuin ympyrän säde)
// _t | Keskuskulma
Function Polar2Y( _r#, _t# )
Return _r * Sin( _t )
EndFunction
//Nimi: XY2PolarR
//Kuvaus: Muuttaa XY-koordinaatit polaarikoordinaattein säteeksi (_r)
//Parametrit: Integer _x, Integer _y
// _x
// _y
Function XY2PolarR( _x#, _y# )
Return Sqrt( ( _y^2 ) + ( _x^2 ) )
EndFunction
//Nimi: XY2PolarT
//Kuvaus: Muuttaa XY-koordinaatit polaarikoordinaattein kulmaksi (_t)
//Parametrit: Integer _x, Integer _y
// _x
// _y
Function XY2PolarT( _x#, _y# )
If _x > 0 And _y >= 0 Then
Return ATan( WrapAngle( _y / _x ) )
ElseIf _x > 0 And _y < 0 Then
Return WrapAngle( ATan( WrapAngle( _y / _x ) ) + 360 )
ElseIf _x < 0 Then
Return WrapAngle( ATan( WrapAngle( _y / _x ) ) + 180 )
ElseIf _x = 0 And _y > 0 Then
Return 90
ElseIf _x = 0 And _y < 0 Then
Return 270
Else
MakeError( "Polar coordinate failure. This shouldn't be possible!" )
EndIf
EndFunction
Code: Select all
SCREEN 480, 480
Include "polar.cb"
Repeat
x# = Rnd( 0, 360 )
y# = Rnd( 0, 360 )
px# = Polar2X( XY2PolarR( x, y ), XY2PolarT( x, y ) )
py# = Polar2Y( XY2PolarR( x, y ), XY2PolarT( x, y ) )
r = XY2PolarR( px, py )
ClearText
Color cbWhite
AddText "Original: ("+x+", "+y+") New: ("+px+", "+py+")"
Color cbRed
Line 240, 240, px / 2 + 240, py / 2 + 240
Circle 240 - ( r / 2 ), 240 - ( r / 2 ), r, 0
Color cbBlue
Line 240, 240, x / 2 + 80, y / 2 + 240
DrawScreen
WaitMouse
Forever