Hallo Progarmmierprofis,
ich bin Musiker mit einer gewissen mathematischen Seite.
Ich habe früher in meinen Anfängen noch mit GFA-Basic auf dem Atari ein paar Programme erstellt, die ich ganz gerne wiederbeleben würde (…in erweiterter Form).
Ich habe früher Grafiken erstellt, indem ich x- und y-Werte berechnet und dann diese in einem Koordinatensystem gezeichnet habe.
Ich möchte nun drei Werte x-, y- z-Werte berechnen (kein Problem) und diese dann in einem dreidimensionalen Koordinatnesystem darstellen.
Und wenn möglich würde ich dieses 3-dimensionale Koordinatensystem auch noch drehen! (…sich langsam drehen lassen…) - Also:
1. Wie kreiere ich ein 3-dimensionales Koordinatensystem?
2. Wie kann ich dieses 3-D-Koordinatensystem drehen?
Dann noch etwas anderes:
Bei meinen alten Programmen aus meiner Studentenzeit verwendete ich oft Variablen der Form
x(a)
wobei a selber wieder eine sich verändernde Variable war, die sich bei jedem Schleifendurchlauf veränderte. - Zu meinem Schrecken habe ich festgestellt, dass sich in Pure Basic solche Variablen nicht bilden lassen. Meine alten Programme wimmeln aber davon… also:
3. Wie kann ich dieses Problem umgehen.
Für die Bantwortung dieser Fragen - auch der Teilfragen! - bin ich wirklich sehr dankbar.
All the best - ›Charly Parker‹
Koordinatensystem mit 3 Koordinaten zeichnen (?)
-
- Beiträge: 2
- Registriert: 18.06.2019 10:15
Re: Koordinatensystem mit 3 Koordinaten zeichnen (?)
Doch, sowas gibt es auch in PureBasic.Charlie Parker hat geschrieben:Dann noch etwas anderes:
Bei meinen alten Programmen aus meiner Studentenzeit verwendete ich oft Variablen der Form
x(a)
wobei a selber wieder eine sich verändernde Variable war, die sich bei jedem Schleifendurchlauf veränderte. - Zu meinem Schrecken habe ich festgestellt, dass sich in Pure Basic solche Variablen nicht bilden lassen.
Das nennt sich Array, siehe https://www.purebasic.com/german/documentation/array/index.html
Re: Koordinatensystem mit 3 Koordinaten zeichnen (?)
Hallo!
Zu deiner 3D Frage:
Schau dir mal diese Include (viewtopic.php?f=10&t=22128) vom "Foren-Physiker": STARGÅTE an.
Ich denke du meinst ein Array, oder doch eine Structure ?Dann noch etwas anderes:
Bei meinen alten Programmen aus meiner Studentenzeit verwendete ich oft Variablen der Form
x(a)
wobei a selber wieder eine sich verändernde Variable war, die sich bei jedem Schleifendurchlauf veränderte. - Zu meinem Schrecken habe ich festgestellt, dass sich in Pure Basic solche Variablen nicht bilden lassen.
Code: Alles auswählen
Structure xa
x.l
a.l
EndStructure
Define x.xa ;Variable x mit Zugriff auf x und a
x\x = 2
Debug x\x
For i = 0 To 1000
x\a + 1
Debug x\a
Next
Schau dir mal diese Include (viewtopic.php?f=10&t=22128) vom "Foren-Physiker": STARGÅTE an.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 2
- Registriert: 18.06.2019 10:15
Re: Koordinatensystem mit 3 Koordinaten zeichnen (?)
Danke für die Antworten zu den Variablen / Arrays etc. das probiere ich aus!
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Koordinatensystem mit 3 Koordinaten zeichnen (?)
Hallo Charlie Parker,
PureBasic auf einer x64 mit nvidia zig GB ist etwas völlig anderes als GFA auf einem ST mit MIDI Schnittstellen und 1 MB.
Vielleicht hilft Dir der Code weiter:
PureBasic auf einer x64 mit nvidia zig GB ist etwas völlig anderes als GFA auf einem ST mit MIDI Schnittstellen und 1 MB.
Vielleicht hilft Dir der Code weiter:
Code: Alles auswählen
; Plot3D Sin(5*x)*Cos(5*z)/2
; Zusammengebaut aus
; PureBasic - examples/3d/MeshManual2.pb +
; https://www.purebasic.fr/english/viewtopic.php?f=36&t=57849
Declare DrawMatrix()
#CameraSpeed = 1
#scale = 3
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/fonts", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
;- Material
CreateMaterial(0, LoadTexture(0, "White.jpg"))
DisableMaterialLighting(0, #True)
;- Mesh Grid
CreateMesh(3, #PB_Mesh_LineList, #PB_Mesh_Static)
DrawMatrix()
FinishMesh(#False)
SetMeshMaterial(3, MaterialID(0))
Grid = CreateNode(#PB_Any, 0, 0, 0)
AttachNodeObject(Grid, MeshID(3))
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 2, 8, #PB_Absolute)
CameraFOV(0, 40)
CameraLookAt(0, NodeX(Grid), NodeY(Grid), NodeZ(Grid))
CameraBackColor(0, RGB(0, 0, 40))
;-Light
CreateLight(0, RGB(255,255,255), -10, 60, 10)
AmbientColor(RGB(90, 90, 90))
Repeat
Screen3DEvents()
ExamineKeyboard()
RotateNode(Grid, 0.0, 0.3, 0.0, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End
Procedure DrawMatrix()
Protected.l a, b, Nb
Protected.w P1, P2, P3, P4
Protected.f x, z
NbX=600
NbZ=600
NbY=600
;xMin.f = -1 : yMin.f = -1: zMin.f = -1 : xMax.f = 1: yMax = 1 : zMax = 1
xMin.f = -3 : yMin.f = -3: zMin.f = -3 : xMax.f = 3: yMax = 3 : zMax = 3
;xMin.f = -10 : zMin.f = -10 : xMax.f = 10: zMax = 10
range = xMax - xMin
step1.f = range / NbX
x.f = xMin: z.f = zMin : y.f = yMin
choice = 4
For b=0 To NbZ
For a=0 To NbX
Select choice
Case 0, 1
y.f = ((1-Sign(-x-0.9+Abs(z*2)))/3*(Sign(0.9-x)+1)/3)*(Sign(x+0.65)+1)/2 -((1-Sign(-x-0.39+Abs(z*2)))/3*(Sign(0.9-x)+1)/3) + ((1-Sign(-x-0.39+Abs(z*2)))/3*(Sign(0.6-x)+1)/3)*(Sign(x-0.35)+1)/2
; text = "((1-Sign(-x-0.9+Abs(z*2)))/3*(Sign(0.9-x)+1)/3)*(Sign(x+0.65)+1)/2 -((1-Sign(-x-0.39+Abs(z*2)))/3*(Sign(0.9-x)+1)/3) + ((1-Sign(-x-0.39+Abs(z*2)))/3*(Sign(0.6-x)+1)/3)*(Sign(x-0.35)+1)/2 "
Case 2
y.f = ATan ((z*z*z)/4 - (x*x))
; text = "ATan ((z*z*z)/4 - (x*x))"
Case 3
y.f = 1/(15*(x*x+z*z))
; text = "1/(15*(x*x+z*z))"
Case 4
y.f = Sin(5*x)*Cos(5*z)/2
; text = "Sin(5*x)*Cos(5*z)/2"
Case 5
y.f = 0.75/Exp((x*5)*(x*5)*(z*5)*(z*5))
; text = "0.75/Exp((x*5)*(x*5)*(z*5)*(z*5))"
Case 6
tmp.f = Log(x*x+z*z)+0.6
y.f = 0.7/tmp
If tmp = 0 ; this is only for this equation, since it has a discontuity
;relax
Else
y.f = 0.7/tmp
EndIf
; text = "Log(x*x+z*z)+0.6"
Case 7
y.f = 0.2
; text = "y = 0.2"
Case 8
y.f = Sin(10*(x*x+z*z))/10
; text = "Sin(10*(x*x+z*z))/10 "
Case 9
y.f = x * x
NbZ = 0 ; for 2D plot to exit the outer Loop
; text = "x ^ 2"
EndSelect
MeshVertexPosition(x, y, z)
MeshVertexNormal(0,1,0)
MeshVertexTextureCoordinate(a/NbX, b/Nbz)
x.f + step1
Next a
x = xMin
z.f + step1
Next b
EndProcedure
Code: Alles auswählen
; plot 3d f(x,y)=sin x cos y
Browser$="firefox" ; ggf. anpassen
RunProgram(Browser$,"https://www.wolframalpha.com/input/?i=plot+sin+x+cos+y","",#PB_Program_Wait)
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum