Axis + Curves Coordinates

Started by Frank Brübach, April 22, 2024, 07:06:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Frank Brübach

Hello Charles again :)

My Idea was to create a simple coordinate system with openGl (consoleG) started this example few days ago but the marks are too Long and perhaps you have an Idea to Set for Marks some values thx, Frank

oxygen

  ' -- opgl test with axis and sin cos curves
  ' -- oxygen by frank bruebach, 15-04-2024
  '
  $ FileName "t.exe"
  $ title    "Triangle and Axis with sin cos curves"
  int width=800
  int height=600

  uses OpenglSceneFrame

  function KeyState(int k) as int
  ===============================
  return GetAsyncKeyState(k) and 0x8000 'key down
  end function

  sub Initialize(sys hWnd)
  '=======================
  end sub
  '
  '--------------------------------------------- //
  sub Scene(sys hWnd)
    'angle = radians(i) ' what is radians(i) it's rad(i) ?

  static single ang1, angi1 = 1
  dim i as integer
  dim x, y, angle as single
  dim radius as single = 2.0
  'dim radius as single = 100.0 ' Larger radius for better curve visibility

 
  glClearColor 0.3, 0.3, 0.5, 0
  glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
 
  glLoadIdentity
 
  gltranslatef 0.0, 0.0, -10.0 '-4.0
  glrotatef ang1, 0.0, 0.0, 1.0
 
  glBegin GL_TRIANGLES
  glColor3f 1.0, 0.0, 0.0 : glVertex3f 0.0, 1.0, 0.0
  glColor3f 0.0, 1.0, 0.0 : glVertex3f -1.0, -1.0, 0.0
  glColor3f 0.0, 0.0, 1.0 : glVertex3f 1.0, -1.0, 0.0
  glEnd
 
  ' Draw axis
  glBegin GL_LINES
  glLineWidth 2.0
  gltranslatef 0,0,-6 '-1
  glscalef 0.01,0.01,0.01
 
  glColor4ub 250,50,0,0 ' X axis color
  glVertex2i -500,0
  glVertex2i 500,0
 
  glColor4ub 0,0,255,0 ' Y axis color
  glVertex2i 0,500
  glVertex2i 0,-500
  glEnd
 
  glBegin GL_LINES
  gltranslatef 0,0,-6
  glscalef 0.5,0.5,0.5
  glColor4ub 0,255,255,0

  ' -- some Marks on axes ---------- //
      for i = -5 to 5 step 1.025
        glVertex2i  i, -0.5001 ' too long and wide the marks (length)
        glVertex2i  i,  0.5001 ' values below 0.5 aren't working
       
        glVertex2i -0.5001, i ' too long and wide the marks (length)
        glVertex2i  0.5001, i ' values below 0.5 aren't working
      next
  glEnd
 
  ' Draw rounded, smooth sine and cosine curves
    'int pi = 3.1415926536

glLineWidth 2.0
glColor4ub 255, 200, 0, 0 
glBegin GL_LINE_STRIP
for i = -360 to 360
angle = i * 3.1415926536 / 180  ' Correct conversion from degrees to radians
glVertex2f i / 360.0 * 2.0 * 3.1415926536, sin(angle)           
next
glEnd

  glBegin GL_LINE_STRIP
    glColor4ub 0, 255, 200, 0
    for i = -360 to 360 'step 5
      angle = i * 3.1415926536 / 180 ' Convert degrees to radians
      glVertex2f i / 360.0 * 2.0 * 3.1415926536, cos(angle) 
    next
  glEnd
  '
  'UPDATE ROTATION ANGLES
  '----------------------
  '
  'ang1+=angi1
  'if ang1>360 then ang1-=360
  '
  end sub


  sub Release(sys hwnd)
  '====================
  end sub


Charles Pegge

This example is fairly close:

You can move / rotate the graph by dragging the origin (TouchZone)

.\demos\OpenGl\DataGraphs\XYZBarLinePlot.o2bas


  % Title "Graph"
 '% Animated
  % ScaleUp
 '% PlaceCentral
 '% AnchorCentral

  uses glo2\GraphUtil


  sub main
  ========
  static sys   imgn,res,wi,ht
  cls

  pushstate 'FOR GRAPH
  '
  static MoveableObject gr
  if not gr.id
    gr.mode=0x111
    gr.snap=.1
    gr.set 100, 0, 5, -16, 0
  end if
  gr.act
  TouchZone
  'color 0,.8,.8,1
  linescale 20.0, 1.0,  .3, 5  'X AXIS
  glRotatef  90,0,1,0
  linescale 20.0, 1.0,  .3, 5  'Z AXIS
  glRotatef -90,0,1,0
  glRotatef  90,0,0,1
  linescale  10.0, 1.0, -.3, 5 'Y AXIS
  glRotatef -90,0,0,1
  '
  'GRIDS
  thickness 1
  color      0,.4,.4,1.
  glRotatef -90,1,0,0
  grid       1,20,20 'FLOOR GRID
  glRotatef  90,1,0,0
  '
  glRotatef  90,0,1,0
  grid       1,20,10 'SIDE GRID
  glRotatef -90,0,1,0
  '
  'X AXIS VALUES
  color .5,1
  pushstate
  move 0,-1.5
  numscale 0,0,10,0,  0,10,2,1,  3 'X NUMBERS
  glRotatef  90,0,1,0
  numscale 0,0,10,0,  0,10,2,1,  3 'Z NUMBERS
  glRotatef -90,0,1,0
  '
  popstate
  'Y AXIS VALUES
  color .99,.50
  pushstate
  move -3
  numscale 0,0,0,5,  0,500,3,0,  3 'Y NUMBERS
  popstate
  'PLOTS
  float d={ 0,1,-0,  5,2,-5,  10,5,-10,  20,9,-15 }
  sys   n=countof(d)/3
  '
  pushstate
    shading
   'color 1.,.3,.0  :  VertBarPlot3d  n,d, .5
    color 1.,.3,.0  :  VertRodPlot3d  n,d, .5
    move 6,8,-10
    'go cube
    'color 1.,.7,.0  :  go sphere
    flat
  popstate
  '
  thickness 2 : color 1.,1.,.0  :     LinePlot3d  n,d
 'thickness 3 : color .0,.5,.0  : VertLinePlot    n,d
 'thickness 3 : color .0,.5,.0  : HorzLinePlot    n,d
  move 0,0,.01
  PointSize 12 : color 0,0,.5,1 : PointPlot3d     n,d
  move 0,0,-.01
 'color .7,.5,.0  : VertBarPlot  n,d, 1.0
 'color .7,.5,.0  : HorzBarPlot  n,d, 1.0
  '
  popstate 'END OF GRAPH
  '
  pushstate
  static MoveableObject title
  if not title.id
    title.mode=0x111
    title.snap=.1
    title.set 200, 0, 2, -3, 0
  end if
  title.act
  TouchZone .5
  scale 2
  printl "3D Graphs"
  popstate
  end sub 'main

  EndScript


Frank Brübach

Thank you Charles didnt know yet this example very good to study :)