add 3dplot example, small doc fixes
This commit is contained in:
parent
7fdbd247e6
commit
4ff6129bc3
2 changed files with 100 additions and 3 deletions
97
examples/3dplot.pas
Normal file
97
examples/3dplot.pas
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
program threedeeplot;
|
||||
const w = 640;
|
||||
h = 400;
|
||||
|
||||
var u0,v0:integer;
|
||||
|
||||
function fun(x0,y0:real):real;
|
||||
const vscale = 50.0;
|
||||
hscale = 20.0;
|
||||
|
||||
var x,y,f:real;
|
||||
begin
|
||||
x := x0 / hscale;
|
||||
y := y0 / hscale;
|
||||
f := sin(sqrt(x*x + y*y));
|
||||
|
||||
fun := f * vscale;
|
||||
end;
|
||||
|
||||
procedure plot;
|
||||
var maxV,minV:array [0..w] of real;
|
||||
shift:integer;
|
||||
x,y,z:integer;
|
||||
lastZ:integer;
|
||||
numLines:integer;
|
||||
i:integer;
|
||||
u,v,lastU,lastV:integer;
|
||||
color:integer;
|
||||
|
||||
procedure resetCurve;
|
||||
begin
|
||||
lastU := -1;
|
||||
lastV := -1;
|
||||
end;
|
||||
|
||||
begin
|
||||
for i := 0 to w do
|
||||
begin
|
||||
maxV[i] := -10000;
|
||||
minV[i] := 10000;
|
||||
end;
|
||||
|
||||
color := 1;
|
||||
shift := 4;
|
||||
x := 0;
|
||||
numLines := 80;
|
||||
u0 := w div 2;
|
||||
v0 := h div 2;
|
||||
|
||||
for i := -(numLines div 2) to numLines do
|
||||
begin
|
||||
resetCurve;
|
||||
x := i * (w div numLines);
|
||||
for y := -w to w do
|
||||
begin
|
||||
z := round(fun(x,y));
|
||||
u := round(y + u0 + i * shift);
|
||||
v := round(-z + v0 - i * shift);
|
||||
|
||||
if (u >= 0) and (u < w) then
|
||||
begin
|
||||
if (v < maxV[u]) and (v > minV[u]) then
|
||||
resetCurve
|
||||
else
|
||||
begin
|
||||
if (u >= 0) and (u < w) and (v > maxV[u]) then
|
||||
maxV[u] := v;
|
||||
if (u >= 0) and (u < w) and (v < minV[u]) then
|
||||
minV[u] := v;
|
||||
|
||||
if lastZ < z then
|
||||
color := 8
|
||||
else
|
||||
color := 1;
|
||||
|
||||
if (u >= w) or (u < 0) or (v >= h) or (v < 0) then
|
||||
resetCurve
|
||||
else
|
||||
begin
|
||||
if lastU = -1 then
|
||||
putpixel(u,v,color)
|
||||
else
|
||||
drawline(lastU,lastV,u,v,color);
|
||||
end;
|
||||
lastU := u;
|
||||
lastV := v;
|
||||
lastZ := z;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
initgraphics;
|
||||
plot;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue