Konische Helix selber zeichnen? (3D)

kali-hi

Banned
Registriert
Sep. 2025
Beiträge
760
Mit welchem Programm oder Sprache kann man eine konische Helix in 3D am besten selber zeichnen? Eine konische Helix ist eine Kurve auf einem senkrechten Kreiskegel, die nach unten zuläuft... also eigentlich eine Spirale oder umgangssprachlich auch Sanduhr...

Seht euch das an besten selber an, nicht ganz leicht beschreibbar: https://de.wikipedia.org/wiki/Konische_Spirale

Gibt es einen Algo, um den nächsten Kurvenpunkt (also Segment) zu berechnen? Kann anti alasing angewandt werden (Kantenglättung...)?

Ich weiß ehrlich gesagt nicht genau, wie man von der Parameterdarstellung zur Koordinatendarstellung kommt - aber ein cas kann dies ja auch leicht berechnen?

Auch wenn es so klingt, dies sind keine Hausaufgaben.
 
  • Gefällt mir
Reaktionen: Scherzinfekt
Das Spiel hier könnte helfen:
- die Formen daraus kann manauch als STL etc. exportieren.
 
  • Gefällt mir
Reaktionen: kali-hi
Wenn eine Spirale in einem Kreis gezeichnet hast, könntest sie in Blender als Textur auf einen Kegel projezieren.
 
GrumpyCat schrieb:
Das Spiel hier könnte helfen
Da fehlt aber noch die (ab-/aufwärts) Spirale... ;)

Ich habe kurz hier hereingeschaut und lege das Ganze erst mal auf Eis.

Wenn man so will, könnte man es auch mit der Bewegung einer rotierenden Roulettekugel (Delrin) vergleichen...
 
kali-hi schrieb:
Da fehlt aber noch die (ab-/aufwärts) Spirale... ;)
Das geht alles mit den Mechaniken, die Tandis bietet. Die Helix ist glaube ich sogar ein Level im Spiel. Braucht man (ausgehend von einer Fläche/"Blech") glaube ich auch nur vier Transformationen/Projektionen für.
 
Da ich nicht weiß wozu das gebraucht wird bzw. was das Ziel ist, könnte auch Geogebra geeignet sein.
 
Also ich werfe einfach numpy+matplotlib / Matlab in den Raum.

Sollte vermutlich eine KI auch schnell hinklatschen.
An für sich ist ein Kegel ja leicht parametrisiert mit Höhenkoordinate und Umfangskoordinate. Die Spirale ergibt sich durch kontinuierliches Anpassen von beiden.

Und von den beiden Koordinaten kommt man sehr simpel auf einen Punkt im Raum.
(Umfangsposition über trigonometrische Funktionen, Höhe direkt. Radius auf dem Kegel über Pythagoras, Winkelsatz, was auch immer.)

Gibt dann bspw. sowas (drehbar):

spirale_von_bing.png


Python:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # Needed for 3D plotting

def conical_spiral(R_max=5, height=10, turns=5, points_per_turn=200):
    """
    Generate coordinates for a conical spiral.
    
    Parameters:
        R_max (float): Base radius of the cone.
        height (float): Total height of the spiral.
        turns (int): Number of spiral turns.
        points_per_turn (int): Resolution of the spiral.
    
    Returns:
        tuple: Arrays (x, y, z) for plotting.
    """
    # Parameter t from 0 to total angle
    t = np.linspace(0, 2 * np.pi * turns, turns * points_per_turn)
    
    # Radius decreases linearly from R_max to 0
    k = R_max / (2 * np.pi * turns)
    r = R_max - k * t
    
    # Height increases linearly
    z = (height / (2 * np.pi * turns)) * t
    
    # Cartesian coordinates
    x = r * np.cos(t)
    y = r * np.sin(t)
    
    return x, y, z

def plot_conical_spiral():
    # Generate spiral data
    x, y, z = conical_spiral(R_max=5, height=10, turns=8, points_per_turn=300)
    
    # Create 3D plot
    fig = plt.figure(figsize=(8, 6))
    ax = fig.add_subplot(111, projection='3d')
    ax.plot3D(x, y, z, color='blue', linewidth=2)
    
    # Labels and style
    ax.set_title("3D Conical Spiral", fontsize=14)
    ax.set_xlabel("X-axis")
    ax.set_ylabel("Y-axis")
    ax.set_zlabel("Z-axis")
    ax.grid(True)
    
    plt.show()

if __name__ == "__main__":
    try:
        plot_conical_spiral()
    except Exception as e:
        print(f"Error plotting spiral: {e}")
 
  • Gefällt mir
Reaktionen: BeBur und kali-hi
In Polarkoordinaten plus Höhe sollte das doch relativ gut machbar sein? Der Radius sollte mit zunehmendem Winkel linear fallen und gleichzeitig die Höhe linear steigen. Und das so lange bis r=0 und fertig.

Dann die Polarkoordinaten in karthesisch (X+Y) wandeln und man hat im Anschluss den "üblichen" 3D Raum in XYZ.
 
  • Gefällt mir
Reaktionen: kali-hi
Danke. :) @simpsonsfan Genau so sollte das Resultat dann aussehen...

Btw. wird dabei auch der "perspektivische Eindruck" berücksichtigt? Also, die hinteren Bögen der Spirale (weiter weg vom Betrachter...) müssten ja etwas schmaler als die vorderen sein.

Ich möchte das so realistisch wie möglich zeichnen. :D (Vielleicht sogar mit Schatten, Ray-Tracing?)

Frohe Weihnachten euch... 🎄 ich bin jetzt erst mal off.
 
kali-hi schrieb:
Also, die hinteren Bögen der Spirale (weiter weg vom Betrachter...) müssten ja etwas schmaler als die vorderen sein.
Bei technischen Zeichnungen gibt es keinen Betrachter. Da das Koordinatensystem willkürlich ist gibt es auch keinen Ansatz, wie stark die perspektivische Verzerrung sein sollte. Sobald man Koordinatensysteme einzeichnet verwendet man diese Verzerrung nicht mehr, da will man Abstände gleich halten.

kali-hi schrieb:
Mit welchem Programm oder Sprache kann man eine konische Helix in 3D am besten selber zeichnen?
Du solltest mal den Kontext und das konkrete Ziel nennen, sonst werden Menschen hier unnütz Zeit investieren. Soll das Ergebnis ein Bild sein oder 3D Daten, wieso soll es perspektivische Verzerrung geben, etc. Was meinst du mit "am besten" und was meinst du mit "selber"?
 
  • Gefällt mir
Reaktionen: simpsonsfan
Hmmm, ich möchte eine technische Zeichnung, die möglichst realistisch wirkt... Wenn sich aber beides ausschließt, dann genügt auch nur eine technische Zeichnung, wie sie in der jetzigen Form vorliegt.

Ich vermute, numpy+matplotlib wendet einfach nur einen Flood-Fill-Algorithmus an, und erzeugt nicht wirklich eine perspektivische Projektion, wie wir sie auch aus Computerspielen kennen, mit all den damit verbundenen Folgen... (keine "perspektivische Verzerrung", keine Schattierung, nicht maßstabsgetreu).

BeBur schrieb:
Du solltest mal den Kontext und das konkrete Ziel nennen, sonst werden Menschen hier unnütz Zeit investieren.
Es gibt keinen konkreten Kontext... Das Ganze war nur eine kleine "Herausforderung", die ich mir gedanklich gestellt hatte. Beruflich habe ich gar nicht mit CAS-Systemen oder Computergrafik zu tun. Betrachtet diese Frage deshalb als gelöst.
 
Ja, technische Zeichnungen und eine perspektivische Projektion schließen sich irgendwo aus.
Eine technische Zeichnung ist aber außerdem auch was anderes, nämlich eine bemaßte Darstellung eines Objekts (Bauteil, Baugruppe o.ä.), die alle notwendigen Informationen zu Herstellung oder Zusammenbau enthält. (Siehe bspw bei Wikipedia hier.)

Und zum Glück ist matplotlib standardmäßig auf Parallelprojektion eingestellt. Im technischen Kontext will man sowas nicht. Anekdote: Ich bin recht viel in dem Progrann StarCCM unterwegs und wenn immer ich das auf einem System zum ersten Mal öffne, ist mit eines der ersten Dinge, die ich tue, die Default-Kamera-Projektion auf orthographisch zu stellen. Ernte dafür bei Kollegen eigentlich stets Verständnis.

Aber dennoch kann man bei matplotlib auch eine perspektivische Projektion verwenden, knall halt ein ax.set_proj_type('persp', focal_length=0.2) o.ä. hin. Wenn du hingegen noch Schatten etc. willst, dann würde ich mir die Kurve rausschreiben und (an kostenlosen Tools) zu Paraview oder Blender greifen.
 
  • Gefällt mir
Reaktionen: BeBur und kali-hi
kali-hi schrieb:
Hmmm, ich möchte eine technische Zeichnung, die möglichst realistisch wirkt
Bei der Visualisierung eines mathematischen Zusammenhanges gibt es nicht wirklich eine 'realistische' Darstellung. Input und Output sind dimensionslose Größen.

kali-hi schrieb:
Ich vermute, numpy+matplotlib wendet einfach nur einen Flood-Fill-Algorithmus an, und erzeugt nicht wirklich eine perspektivische Projektion, wie wir sie auch aus Computerspielen kennen, mit all den damit verbundenen Folgen... (keine "perspektivische Verzerrung", keine Schattierung, nicht maßstabsgetreu).
Eine perspektivische Verzerrung zu berechnen ist ziemlich simpel. Schattenberechnungen in diesem spezifischen Kontext sind ebenfalls ziemlich simpel. Numpy an sich hat im Prinzip nichts damit zu tun. Maßstabsgetreu kann so ein plot nicht sein, denn es gibt keinen Maßstab.

kali-hi schrieb:
Es gibt keinen konkreten Kontext... Das Ganze war nur eine kleine "Herausforderung", die ich mir gedanklich gestellt hatte.
Finde ich seltsam, weil das ist ein einfacher plot, aber okay. Bei einer Herausforderung hätte ich allerdings gedacht, dass man versucht das selber zu lösen.
 
Sind eigentlich GIFs im Forum erlaubt? Dann könnten wir einen kleinen Wettbewerb mach... Aber, ich glaube nicht, vermutlich nur statische Bilder. :D

BeBur schrieb:
Bei einer Herausforderung hätte ich allerdings gedacht, dass man versucht das selber zu lösen.
Bei so etwas böte es sich auch an, eine KI zu befragen, es in einer beliebigen Programmiersprache umzusetzen... die kann das nämlich inzwischen auch ganz gut - ohne, dass man viel Mathematik-Vorwissen bräuchte. Aber gut.
 
Ganz nebenbei, das können diese heutigen Grafischen Taschenrechner auch schon:
1766743717314.jpg
Musste ich gleich mal ausprobieren.:D
 
  • Gefällt mir
Reaktionen: kali-hi
Zurück
Oben