0 Daumen
202 Aufrufe

Hallo zusammen. Ich möchte gerne in GeoGebra, Desktop Version oder Web-Version, ein Makro oder etwas Ähnliches einlesen, um in der 3D Ansicht die folgenden Punkte, Kreise, Strecken und noch viel mehr einzufügen:

Kreis((0,0,0),1)
Kreis((0,0,1),1)
P1=(1,0,0)
P2=(2,3,0)
P3=(2,3,1)
P4=(3,1,0)
Strecke(P1,P2)

Insgesamt möchte ich ca. 100 Befehle auf einmal einfügen. Wie geht denn das?

Avatar vor von 4,1 k

1 Antwort

0 Daumen

hallo,

es gibt 2 Arten von "Makros" - Geogebra Script und Javascript. - scriptsprache ist englisch

Normale ggb Befehle lassen sind mit

Execute( <List of Text>, <Parameter>, <Parameter>, ... )

l1 = {"Circle((0,0,0),1)", "Circle((0,0,1),1)", "P1=" + (1, 0, 0), "P2=" + (2, 3, 0), "P3=" + (2, 3, 1), "P4=" + (3, 1, 0), "Segment(P1,P2)"}

Execute(l1)

zusammenfassen als eigenes Tool oder in einem Button hinterlegen

guckst du

https://geogebra.github.io/docs/manual/en/commands/Scripting_Commands/

Avatar vor von 21 k

Hallo wächter. Vielen Dank für deine Hilfe. Was der ChatGPT nicht hinbekommen hat, das hast du hinbekommen. Vielen Dank!

Also wenn ich ChatGPT frage, schlägt er mir auch Skripting vor... ;)

hm,

dieser technologie würde ich nur fragen unseres fachgebietes stellen, deren antwort ich schon kenne...

Einer der Lösungsvorschläge vom ChatGPT war:
Datei punkte.csv anlegen.
•  Öffne GeoGebra (3D-Ansicht).
•  Klicke auf Datei → Öffnen → CSV-Datei wählen.
•  Wähle "Punkte" als Objekttyp.
•  Fertig! Die Punkte erscheinen in der 3D-Ansicht.
Das funktioniert aber nicht. Alle anderen Vorschläge von ihm haben auch nicht funktioniert.

Hm,

das hat ganz bestimmt nichts mit der 3D Ansicht zu tun - es wäre auch von Interesse welche App Du verwendest - ich beziehe mich auf die Classic

welche Daten stehen denn in der csv? das können wohl keine direkt verwendbaren Grafikdaten sein)

Open Spreadsheet - rechts Klick auf Zelle (A1) - Import Data file

- d.h komma getrennte zahlenwerte

Hallo wächter. Woher weiß ich, welche App ich verwende? Die Web-Version erhalte ich mit www.geogebra.org -> Rechner -> Rechner Suite. Die Desktop-Version erhalte ich mit www.geogebra.org -> Mathe Rechner -> Download.
Der ChatGPT will, dass ich in die csv Datei reinschreibe:
x,y,z
1,0,0
1,3,0
4,2,3
Was meinst du mit „Open Spreadsheet“? Soll das ein Befehl in Geogebra sein? Den finde ich leider nicht.

hm,

die "Rechner Suite" ist noch ziemlich unfertig - ich verwende sie nicht für ernsthafte Projekte. Ich rede von

https://www.geogebra.org/classic

- und da verwende ich auch meist die Java-Version 5.2 als windows-installation, der Link verweist auf die Version 6.0 (Javascript-Basis).

Welche Funktionalitäten der Classic bereits in der Suite umgesetzt sind hab ich nicht zuverlässig auf dem Schirm - ein Spreadsheet gibt es aber z.B. im Graphing-Modul der Suite.

Vielleicht sollest Du Dein Projekt mal vorstellen, damit ich eine Vorstellung entwickeln kann wie man es am besten an gehen könnte?

Scheinbar ist es ein 3D Projekt?

BTW: Nichts was von ChatGPT kommt passt auf die Suite!

Tabelle ist die deutsche Form des Spreadsheat.

Man kann in Geogebra in einer Tabelle also eine Liste von Punkten anlegen.

Nützlich ist es, wenn du z.B. Messdaten in Excel vorliegen hast und willst daraus in Geogebra einen Graph skizzieren lassen.

Aber Achtung! Das gilt eben nur für Punkte und nicht für beliebige Konstruktionen wie Kreise etc.

Hallo wächter.


Vielen Dank für den Hinweis auf https://www.geogebra.org/classic.


Gerne stelle ich dir mein Projekt vor. Gegeben ist der Florida Suncoast Dome, ein gigantisches Stadion von 210 m Durchmesser. Hier sind die Links:
https://www.arcaro.org/tension/album/suncoast.htm.
https://en.wikipedia.org/wiki/Tropicana_Field
Ich möchte dieses gerne in 3D modellieren. Wenigstens mit dem Grundkreis, den 24 Pfeilern und dem Polygonzug die oberen Enden der Pfeiler entlang. Mit deiner Methode
l1 = {"Circle((0,0,0),1)", "Circle((0,0,1),1)", "P1=" + (1, 0, 0), "P2=" + (2, 3, 0), "P3=" + (2, 3, 1), "P4=" + (3, 1, 0), "Segment(P1,P2)"}
Execute(l1)
sollte das klappen. Falls die Eingabezeilen sehr lang werden dürfen.

Die Eingabe Liste kann beliebig lang sein. Ich würde aber empfehlen funktionale Abschnitte zusammenzustellen und die hintereinander ablaufen zu lassen. Ein paar Hinweise

https://www.geogebra.org/m/ryygpaze

Hast Du konkrete Daten oder willst Du alles aus den Links herausziehen.

ggf. brauchst es auch kein Script und Du kannst die Elemente über eine Liste/Sequence/Zip aufbauen - schau mal in den Link vielleicht hilfts?

Hallo wächter. Das ist super, dass die Liste beliebig lang sein kann. - Vielen Dank für deinen Link, aber die Hinweise darin erfordern einen tiefen Einstieg in die Materie. Zu tief für mich und mein Projekt. - Ich habe zunächst mit einem einfacheren Modell angefangen: Mit einem Zylinder über dem Einheitskreis. Erst im nächsten Schritt werde ich mich dann um die Ellipse als Deckel kümmern.

Hier meine Daten:

Zwei Kreise und die Punkte auf dem unteren Kreis.


Execute({"Circle((0,0,0),1)", "Circle((0,0,1),1)", "P0=" + (1, 0, 0), "P15=" + (cos(15°), sin(15°), 0), "P30=" + (cos(30°), sin(30°), 0), "P45=" + (cos(45°), sin(45°), 0), "P60=" + (cos(60°), sin(60°), 0), "P75=" + (cos(75°), sin(75°), 0), "P90=" + (cos(90°), sin(90°), 0), "P105=" + (cos(105°), sin(105°), 0), "P120=" + (cos(120°), sin(120°), 0), "P135=" + (cos(135°), sin(135°), 0), "P150=" + (cos(150°), sin(150°), 0), "P165=" + (cos(165°), sin(165°), 0), "P180=" + (cos(180°), sin(180°), 0), "P195=" + (cos(195°), sin(195°), 0), "P210=" + (cos(210°), sin(210°), 0), "P225=" + (cos(225°), sin(225°), 0), "P240=" + (cos(240°), sin(240°), 0), "P255=" + (cos(255°), sin(255°), 0), "P270=" + (cos(270°), sin(270°), 0), "P285=" + (cos(285°), sin(285°), 0), "P300=" + (cos(300°), sin(300°), 0), "P315=" + (cos(315°), sin(315°), 0), "P330=" + (cos(330°), sin(330°), 0), "P345=" + (cos(345°), sin(345°), 0)})

Die Punkte auf dem oberen Kreis. „PT“ steht für „top“.


Execute({"PT0=" + (1, 0, 1), "PT15=" + (cos(15°), sin(15°), 1), "PT30=" + (cos(30°), sin(30°), 1), "PT45=" + (cos(45°), sin(45°), 1), "PT60=" + (cos(60°), sin(60°), 1), "PT75=" + (cos(75°), sin(75°), 1), "PT90=" + (cos(90°), sin(90°), 1), "PT105=" + (cos(105°), sin(105°), 1), "PT120=" + (cos(120°), sin(120°), 1), "PT135=" + (cos(135°), sin(135°), 1), "PT150=" + (cos(150°), sin(150°), 1), "PT165=" + (cos(165°), sin(165°), 1), "PT180=" + (cos(180°), sin(180°), 1), "PT195=" + (cos(195°), sin(195°), 1), "PT210=" + (cos(210°), sin(210°), 1), "PT225=" + (cos(225°), sin(225°), 1), "PT240=" + (cos(240°), sin(240°), 1), "PT255=" + (cos(255°), sin(255°), 1), "PT270=" + (cos(270°), sin(270°), 1), "PT285=" + (cos(285°), sin(285°), 1), "PT300=" + (cos(300°), sin(300°), 1), "PT315=" + (cos(315°), sin(315°), 1), "PT330=" + (cos(330°), sin(330°), 1), "PT345=" + (cos(345°), sin(345°), 1), "Segment(P0,PT0)", "Segment(P15,PT15)", "Segment(P30,PT30)", "Segment(P45,PT45)", "Segment(P60,PT60)", "Segment(P75,PT75)", "Segment(P90,PT90)", "Segment(P105,PT105)", "Segment(P120,PT120)", "Segment(P135,PT135)", "Segment(P150,PT150)", "Segment(P165,PT165)", "Segment(P180,PT180)", "Segment(P195,PT195)", "Segment(P210,PT210)", "Segment(P225,PT225)", "Segment(P240,PT240)", "Segment(P255,PT255)", "Segment(P270,PT270)", "Segment(P285,PT285)", "Segment(P300,PT300)", "Segment(P315,PT315)", "Segment(P330,PT330)", "Segment(P345,PT345)"})

Hier das Ergebnis:


blob.png

Ajee, mal einen Versuch ohne zu Skripten, das ist für Deinen Zweck ehr nicht angezeigt?

Du musst die Punkte nicht singulär definieren, die stellt man besser in eine Liste z.B.

r=210, Ring=Circle((0, 0, 0), r / 2, xOyPlane)

URing=Join({Sequence(Point(Ring, k / 24), k, 0, 11), Sequence(Point(Ring, k / 24), k, 12, 23)})

ORing=Join({Sequence(Point(Ring, k / 24) + (0, 0, 30.48 + (53.22 - 30.48) k / 12), k, 0, 11), Sequence(Point(Ring, k / 24) + (0, 0, 53.22 - (53.22 - 30.48) (k - 12) / 12), k, 12, 23)})

und greift per index j auf diese Listen (Element(liste,j) oder kurz liste(j)) zu

Säule1=Sequence(Segment(URing(k), ORing(k)), k, 1, 12)

Säule2=Sequence(Segment(URing(k), ORing(k)), k, 13, 24)

die Höhe hab ich nicht auslesen können, setze O = (0, 0, 62)

Träger=Sequence(CircumcircularArc(ORing(j), O, ORing(j + 12)), j, 1, 12)

Das Dach in geraden Segmenten der einfachkeit halber

M=Center(Träger(1))
d=Sequence(Surface(Träger(j), 2π / 24, Line(M, O)), j, 1, 12)

Linienstärken, Farben anpassen - ungefär so...

blob.png

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community