Code archives/Algorithms/Cosineinterpolytion
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Hi! THX to Markus! http://astronomy.swin.edu.au/~pbourke/analysis/interpolation/ for more methods cu olli | |||||
; Set the screensize
Graphics 640,480,32,2
SetBuffer BackBuffer()
; Dimension the pointarray and set startvalues
Dim DataPoint(4,1)
DataPoint(0,0) = 100 : DataPoint(0,1) = 090
DataPoint(1,0) = 200 : DataPoint(1,1) = 160
DataPoint(2,0) = 300 : DataPoint(2,1) = 300
DataPoint(3,0) = 400 : DataPoint(3,1) = 210
DataPoint(4,0) = 500 : DataPoint(4,1) = 100
; Set the clearcolor to red, and select point 0
ClsColor 255,255,255 : Global Selected = 0
; Mainloop
While Not KeyDown(1)
Cls ; Clear screen
; Userinput (Use [Q] and [W] to select a point,
; and Arrowkeys to position the selected point)
If KeyHit(16) And Selected > 0 Then Selected = Selected - 1
If KeyHit(17) And Selected < 4 Then Selected = Selected + 1
If KeyDown(203) Then DataPoint(Selected,0) = DataPoint(Selected,0) - 1
If KeyDown(205) Then DataPoint(Selected,0) = DataPoint(Selected,0) + 1
If KeyDown(200) Then DataPoint(Selected,1) = DataPoint(Selected,1) - 1
If KeyDown(208) Then DataPoint(Selected,1) = DataPoint(Selected,1) + 1
DrawLine() ; Draw the interpolated line between point 0 and 4
Flip ; Flip backbuffer to frontbuffer
Wend
End ; End of programm
Function DrawLine()
; Startpoint for the first Line
X = DataPoint(0,0) : Y = DataPoint(0,1) : Color 0,0,0
; Draw the interpolyted Line between point 0 and 1
MX = (DataPoint(0,0) - DataPoint(1,0)) * (-1)
For MU# = 0 To 1.0 Step 0.08
OX = X : OY = Y
Y = CosineInterpolate(DataPoint(0,1),DataPoint(1,1),MU#)
X = MX * MU# + DataPoint(0,0)
Line OX,OY,X,Y
Next
; Draw the interpolated line between point 1 and 4
For I = 2 To 4
MX = (DataPoint(I - 1,0) - DataPoint(I,0)) * (-1)
For MU# = 0 To 1.0 Step 0.08
OX = X : OY = Y
Y = CosineInterpolate(DataPoint(I - 1,1),DataPoint(I,1),MU#)
X = MX * MU# + DataPoint(I - 1,0)
Line OX,OY,X,Y
Next
Next
; Dra the anchor points
Color 255,0,0
For I = 0 To 4
If Selected = I Then
Color 0,0,255
Else
Color 255,0,0
EndIf
Oval DataPoint(I,0) - 2,DataPoint(I,1) - 2,5,5,1
Next
End Function
; Function for cosineinterpolated line
Function CosineInterpolate(Y1#,Y2#,MU#)
Local MU2#
MU2# = (1.0 - Cos(MU# * 180.0))/2.0
Return (Y1# * (1.0 - MU2#) + Y2# * MU2#)
End Function
; Function for normal line
Function LinearInterpolate(Y1#,Y2#,MU#)
Return Y1# * (1 - MU#) + Y2# * MU#
End Function |
Comments
None.
Code Archives Forum