Графики
|
|
haav | Дата: Среда, 10.10.2012, 06:44 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Я уже все почти успел позабыть из школьной программы, но вот как-то парабола запомнилась .
Парабола
Code Screen 1 Window ( -11, -10 ) - ( 3, 10) For x As double=-7 To -1 Step 0.001 Var y=2*(x^2)+(16*x)+23 PSet(x,y),2 Next 'Или проще Window ( -10, 0 ) - ( 10, 10) For x As double=-3 To 3 Step 0.001 Var y=x^2 PSet(x,y),2 Next Sleep
Кривая:
Code Screen 1 Window ( -10, -10 ) - ( 10, 10) For x As double=0 To 3 Step 0.001 Var y=x^2 PSet(x,y),2 PSet(-x,-y),2 Next Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Понедельник, 15.10.2012, 07:29 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Синусоида
Автор: dodicat
Code Dim As Integer xres,yres screeninfo xres,yres screenres xres,yres,32 dim as double PLOT_GRADE=4000000 #macro sketch(_function,minx,maxx,miny,maxy) For x As Double=minx To maxx Step (maxx-minx)/PLOT_GRADE dim as double x1=Cdbl(xres)*(x-minx)/(maxx-minx) dim as double y1=Cdbl(yres)*(_function-maxy)/(miny-maxy) Pset(x1,y1) Next x #endmacro 'SAME MACRO WITH EXTERNAL DIMS dim as double x0,x1,x2,y2 #macro sketch2(_function,minx,maxx,miny,maxy) For x0 =minx To maxx Step (maxx-minx)/PLOT_GRADE x2=Cdbl(xres)*(x0-minx)/(maxx-minx) y2=Cdbl(yres)*(_function-maxy)/(miny-maxy) Pset(x2,y2) Next x0 #endmacro
dim as double t1,t2,t3,t4 print "PRESS A KEY TO START" sleep t1=timer sketch(sin(x)/x,-20,40,-1,2) t2=timer print "press a key" sleep cls t3=timer sketch2(sin(x0)/x0,-20,40,-1,2) t4=timer print "Time for internal dim ";t2-t1 print "Time for external dim ";t4-t3 Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 18.12.2012, 08:25 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
|
Автор: dodicat
Code '============== PLOTTING MACROS ======================= Dim As Double fn_minx,fn_maxx,fn_miny,fn_maxy,PLOTGRADE=500 Dim As Double vu_minx,vu_maxx,vu_miny,vu_maxy Dim As Double pi=4*Atn(1) 'unused here
#define map(a,b,x,c,d) ((d)-(c))*((x)-(a))/((b)-(a))+(c)
#macro Set_Function_Limits(minimum_x,maximum_x,minimum_y,maximum_y) fn_minx=(minimum_x) fn_maxx=(maximum_x) fn_miny=(minimum_y) fn_maxy=(maximum_y) #endmacro
#macro Set_ViewPort(LowerX,LowerY,UpperX,UpperY) vu_minx=(LowerX) vu_maxx=(UpperX) vu_miny=(LowerY) vu_maxy=(UpperY) #endmacro
#macro plot(A_FUNCTION,colour) Scope Var switch=0 For x As Double =fn_minx To fn_maxx Step(fn_maxx-fn_minx)/PLOTGRADE Var xp=map(fn_minx,fn_maxx,x,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,(A_Function),Vu_miny,Vu_maxy) If yp>Vu_minY And yp<Vu_maxy Then If switch=0 Then Pset (xp,yp),(colour) switch=1 Else Line -(xp,yp),(colour) End If End If Next x End Scope #endmacro
#macro Draw_Axis(colour) If Sgn(fn_miny)<>Sgn(fn_maxy) Then Var xp=map(fn_minx,fn_maxx,fn_minx,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,0,Vu_miny,Vu_maxy) Pset(xp,yp),(colour) xp=map(fn_minx,fn_maxx,fn_maxx,Vu_minx,Vu_maxx) yp=map(fn_maxy,fn_miny,0,Vu_miny,Vu_maxy) Line -(xp,yp),(colour) End If If Sgn(fn_minx)<>Sgn(fn_maxx) Then Var xp=map(fn_maxx,fn_minx,(fn_minx+fn_maxx),Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,fn_miny,Vu_miny,Vu_maxy) Pset(xp,yp),(colour) xp=map(fn_maxx,fn_minx,(fn_minx+fn_maxx),Vu_minx,Vu_maxx) yp=map(fn_maxy,fn_miny,fn_maxy,Vu_miny,Vu_maxy) Line -(xp,yp),(colour) End If #endmacro #macro Add_Info(a_function,colour) Draw String(vu_minx+2,vu_miny+20),#a_function,(colour) Draw String(vu_minx,(vu_miny+vu_maxy+2)/2),Str(fn_minx),(colour) Draw String(vu_maxx-8-8*(Len(Str(fn_maxx))),(vu_miny+vu_maxy)/2),Str(fn_maxx),(colour) Draw String((vu_minx+vu_maxx)/2-4*Len(Str(fn_maxy)),vu_miny),Str(fn_maxy),(colour) Draw String((vu_minx+vu_maxx)/2-4*Len(Str(fn_miny)),vu_maxy-14),Str(fn_miny),(colour) #endmacro
#macro Draw_Viewport(BorderColour,PortColour) Line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(PortColour),bf Line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(BorderColour),b #endmacro
#macro Get_Y_Limits(a_function,a_range,miny,maxy) Scope Dim As Double min=1e9,max=-1e9 For x As Double=a_range Step 1/plotgrade Var f=(a_function) If min>f Then min=f If max<f Then max=f Next x maxy=max:miny=min End Scope #endmacro
'not used here #macro Get_Roots(a_function,range) print "Roots" scope dim as double lead,lag,flag for x as double=range step 1/PLOTGRADE lead=(a_function) if sgn(lead)<>sgn(lag) or lead=0 then Var xp=map(fn_minx,fn_maxx,x,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,(A_Function),Vu_miny,Vu_maxy) if flag then print x circle(xp,yp),5 end if end if lag=lead flag=1 next x end scope #endmacro ' ==============================================================
function squarewave(x as double)as double dim f as double for n as double=1 to 40 step 2 f=f+sin(n*x)/n next n f=.5-(2/3.142)*f return f end function 'YOUR FUNCTION #define MYFUNCTION squarewave(x)
Screen 20,32
Dim As Double minx,maxx Dim As Double miny,maxy 'Set the x range limits minx=-15 maxx=15
'miny=-1 'set y values here if you don't want to use Get_Y_Limits() 'maxy=2 PLOTGRADE=500 'doesn't pset each point, but joins points by lines 'SO, ~500 little lines draw the curve 'Using all the macro's Set_Viewport(200,100,900,700)
Draw_Viewport(Rgb(0,200,0),Rgb(50,50,50))
Get_Y_Limits(MYFUNCTION,minx To maxx,miny,maxy)'Automate the y range limits into miny and maxy
Set_Function_limits(minx,maxx,miny,maxy)
Draw_Axis(Rgb(200,0,0))
Add_Info(MYFUNCTION,Rgb(200,200,200)) 'puts some numbers in the viewport
plot(MYFUNCTION,Rgb(255,255,255))
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 18.12.2012, 08:27 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
|
Автор: dodicat
Code '============== PLOTTING MACROS ======================= Dim As Double fn_minx,fn_maxx,fn_miny,fn_maxy,PLOTGRADE=500 Dim As Double vu_minx,vu_maxx,vu_miny,vu_maxy Dim As Double pi=4*Atn(1) 'unused here
#define map(a,b,x,c,d) ((d)-(c))*((x)-(a))/((b)-(a))+(c)
#macro Set_Function_Limits(minimum_x,maximum_x,minimum_y,maximum_y) fn_minx=(minimum_x) fn_maxx=(maximum_x) fn_miny=(minimum_y) fn_maxy=(maximum_y) #endmacro
#macro Set_ViewPort(LowerX,LowerY,UpperX,UpperY) vu_minx=(LowerX) vu_maxx=(UpperX) vu_miny=(LowerY) vu_maxy=(UpperY) #endmacro
#macro plot(A_FUNCTION,colour) 'draws plot by lines instead of psetting each point Scope Var switch=0 For x As Double =fn_minx To fn_maxx Step(fn_maxx-fn_minx)/PLOTGRADE Var xp=map(fn_minx,fn_maxx,x,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,(A_Function),Vu_miny,Vu_maxy) If yp>Vu_minY And yp<Vu_maxy Then If switch=0 Then Pset (xp,yp),(colour) switch=1 Else Line -(xp,yp),(colour) End If End If Next x End Scope #endmacro
#macro Draw_Axis(colour) If Sgn(fn_miny)<>Sgn(fn_maxy) Then Var xp=map(fn_minx,fn_maxx,fn_minx,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,0,Vu_miny,Vu_maxy) Pset(xp,yp),(colour) xp=map(fn_minx,fn_maxx,fn_maxx,Vu_minx,Vu_maxx) yp=map(fn_maxy,fn_miny,0,Vu_miny,Vu_maxy) Line -(xp,yp),(colour) End If If Sgn(fn_minx)<>Sgn(fn_maxx) Then Var xp=map(fn_maxx,fn_minx,(fn_minx+fn_maxx),Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,fn_miny,Vu_miny,Vu_maxy) Pset(xp,yp),(colour) xp=map(fn_maxx,fn_minx,(fn_minx+fn_maxx),Vu_minx,Vu_maxx) yp=map(fn_maxy,fn_miny,fn_maxy,Vu_miny,Vu_maxy) Line -(xp,yp),(colour) End If #endmacro #macro Add_Info(a_function,colour) Draw String(vu_minx+2,vu_miny+20),#a_function,(colour) Draw String(vu_minx,(vu_miny+vu_maxy+2)/2),Str(fn_minx),(colour) Draw String(vu_maxx-8-8*(Len(Str(fn_maxx))),(vu_miny+vu_maxy)/2),Str(fn_maxx),(colour) Draw String((vu_minx+vu_maxx)/2-4*Len(Str(fn_maxy)),vu_miny),Str(fn_maxy),(colour) Draw String((vu_minx+vu_maxx)/2-4*Len(Str(fn_miny)),vu_maxy-14),Str(fn_miny),(colour) #endmacro
#macro Draw_Viewport(BorderColour,PortColour) Line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(PortColour),bf Line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(BorderColour),b #endmacro
#macro Get_Y_Limits(a_function,a_range,miny,maxy) Scope Dim As Double min=1e9,max=-1e9 For x As Double=a_range Step 1/plotgrade Var f=(a_function) If min>f Then min=f If max<f Then max=f Next x maxy=max:miny=min End Scope #endmacro
#macro Get_Roots(a_function,range) print "Roots" scope dim as double lead,lag,flag for x as double=range step 1/PLOTGRADE lead=(a_function) if sgn(lead)<>sgn(lag) or lead=0 then Var xp=map(fn_minx,fn_maxx,x,Vu_minx,Vu_maxx) Var yp=map(fn_maxy,fn_miny,(A_Function),Vu_miny,Vu_maxy) if flag then print x circle(xp,yp),5 end if end if lag=lead flag=1 next x end scope #endmacro ' ==============================================================
'YOUR FUNCTION #define MYFUNCTION sin(2*x)*(x^4-10*x^3+2*x^2-7*x)-200
Screen 20,32
Dim As Double minx,maxx Dim As Double miny,maxy 'Set the x range limits minx=-5 maxx=10 'if you set the y range limits here then no need to Get_Y_Limits miny=0 maxy=0 PLOTGRADE=500 'doesn't pset each point, but joins points by lines 'SO, ~500 little lines draw the curve 'Using all the macro's Set_Viewport(200,100,900,700)
Draw_Viewport(Rgb(0,200,0),Rgb(50,50,50))
Get_Y_Limits(MYFUNCTION,minx To maxx,miny,maxy)'Automate the y range limits into miny and maxy
Set_Function_limits(minx,maxx,miny,maxy) 'set the function limits
Draw_Axis(Rgb(200,0,0))
Add_Info(MYFUNCTION,Rgb(200,200,200)) 'puts some numbers in the viewport
plot(MYFUNCTION,Rgb(255,255,255))
PLOTGRADE=2000 'increase the grade to fine tune for roots Get_Roots(MYFUNCTION,minx to maxx)
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 18.12.2012, 08:31 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
|
Autor: Richard
Code Dim As Double Pi = 4 * Atn(1)
Screenres 800, 600, 4 ' set window size and depth Window (-Pi, -1.5)-(Pi, +1.5) ' set scale for graphics window
Line (0, -1.5)-(0, 1.5), 7 Line (-Pi, 0)-(Pi, 0), 7 Line (-Pi, -1)-(Pi, -1), 2 Line (-Pi, 1)-(Pi, 1), 2 Draw String (0, 0), "Origin", 7 Draw String (0, 1), "+1", 7 Draw String (0,-1), "-1", 7 Draw String (-Pi, 0), "-Pi", 7
Dim As Double theta For theta = -Pi To Pi Step .001 Pset(theta, Cos(theta) ), 14 Pset(theta, Sin(theta) ), 13 Next theta
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 18.12.2012, 08:32 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
|
Autor: BasicCoder2
Code screenres 640,480,32 const KK = .0174533 'convert degrees to radians for sin and cos dim as double multX multX = 640/360 'max width = 640 and maximum value = 360 line (0,240)-(639,240),rgb(127,127,127) for i as double = 0 to 360 pset (i*multX,cos(i*KK)*50+240),rgb(255,0,0) ' red plot (240 is half of height) pset (i*multX,sin(i*KK)*50+240),rgb(0,255,0) ' green plot next i Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 18.12.2012, 08:34 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
|
Автор: dodicat
Code '============== PLOTTING MACROS ======================= dim shared as double fn_minx,fn_maxx,fn_miny,fn_maxy,PLOTGRADE=2000 dim shared as double vu_minx,vu_maxx,vu_miny,vu_maxy dim shared as double pi=4*atn(1) #define map(a,b,x,c,d) ((d)-(c))*((x)-(a))/((b)-(a))+(c)
#macro function_limits(minimum_x,maximum_x,minimum_y,maximum_y) fn_minx=(minimum_x) fn_maxx=(maximum_x) fn_miny=(minimum_y) fn_maxy=(maximum_y) #endmacro
#macro Set_ViewPort(LowerX,LowerY,UpperX,UpperY) vu_minx=(LowerX) vu_maxx=(UpperX) vu_miny=(LowerY) vu_maxy=(UpperY) 'vu_minx=(LowerX) #endmacro #macro plot(A_FUNCTION,colour) print #A_Function 'line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(colour),b 'optional viewport border for x as double=fn_minx to fn_maxx step(fn_maxx-fn_minx)/PLOTGRADE var xp=map(fn_minx,fn_maxx,x,Vu_minx,Vu_maxx) var yp=map(fn_maxy,fn_miny,(A_Function),Vu_miny,Vu_maxy) if yp>Vu_minY and yp<Vu_maxy then pset (xp,yp),(colour) next x #endmacro
#macro Draw_Viewport(BorderColour,PortColour) line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(PortColour),bf line(Vu_minx,Vu_miny)-(Vu_maxx,Vu_maxy),(BorderColour),b #endmacro
#macro getlimits(a_function,a_range,miny,maxy) scope dim as double min=1000000,max=-1000000 for x as double=a_range step 1/plotgrade var f=(a_function) if min>f then min=f if max<f then max=f next x maxy=max:miny=min end scope #endmacro ' ==============================================================
'YOUR FUNCTION #define MYFUNCTION 4*sin(x)+cos(4*x)+x +7
screen 20,32
dim as double minx=-3,maxx=3 dim as double miny,maxy
Set_Viewport(200,200,800,600) Draw_Viewport(rgb(0,200,0),rgb(50,50,50))
getlimits(MYFUNCTION,minx to maxx,miny,maxy)'get the yrange limits into miny and maxy
function_limits(minx,maxx,miny,maxy) 'set the function limits
plot(MYFUNCTION,rgb(255,255,255)) locate 4,30 print "MINIMUM Y " &miny & " MAXIMUM Y " &maxy sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|