Kurve zeichnen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Eistee.

    Kurve zeichnen

    Hi,

    ich wollte hier fragen wie ich mithilfe von GDI so eine Kurve zeichnen kann.

    Bekannt sind die zwei Punkte im unterem Bild (rot) sowie die Länge der Linie mit den Schwarzen Punkten.
    Alle 3 Faktoren sind Variabel

    Es kann z.b. auch sein das die kurve nach Links geht..
    Der "Bogen" der oberen Lienie sollte immer da sein auch wenn der obere rote Punkt weit unten liegt
    Wie der Bogen "gebogen" ist <-- :D ist eig. egal Hauptsache es ist immer ein Bogen.

    Da ich höchstwarscheinlich an einer abgeschwächten Form von Dyskalkulie leide weiß ich da nicht genau wie ich diesen Bogen berechnen/zeichnen soll.
    Also die Punkte mußt du dir zu Fuß ausrechnen und in ein Point-Array packen. Dann kannst du mit graphics.drawcurve eine Splin-Kurve oder mit graphics.drawlines eine Polylinie zeichnen.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Wie kann ich den Anhand des Winkels eine Linie zeichnen?

    Alsi ich sag mal Ausgangspunkt (100|100)

    _=______________________(100|100)-----------------
    90° = ________---------------(100|100)

    Also wie Errechne ich den zweiten Punkt (das Ende) der Linie?

    Ich hab keine Ahnung wie ich das mache wenn der Winkel z.B. 32 ist :S

    Eistee schrieb:

    _=______________________(100|100)-----------------
    90° = ________---------------(100|100)

    Ich verstehe das nicht ganz, kannst du es mal genauer erläutern?
    (Mit xy-Koordinatenfeld im Paint? Muss nicht genau sein.)

    Wären die 90° nicht eher 180°? Wenn ja denke ich, dass ich verstanden habe, was du willst ^^
    Dann könnte ich dir auch helfen.
    Von meinem iPhone gesendet
    Faszinierend!.. ich habe mal rumprobiert und ein paar eine Mathemartische Formel aus dem i-net in den Code gehauen und mal Probiert ...
    Das ist ja sooo genial xD (Wenn mann die richtigen Einstellung findet :D )

    Nur leider Absolut nicht das was ich haben will :(
    Hier mal zum Testen (Anlage)

    _________________________________________________

    nikeee13 ja sry meinte 180°

    Zu dem was ich will:

    Wie mann oben auf meinem Bild erkennen kann ist das ja ein Bogen und eine Grade Lienie
    Die Grade soll den Schatten des Bogens Darstellen
    Der Bogen soll von der Ausgangsposition nach 0 bis 180 ° gehen
    0° Der Bogen + Schatten ist grade nach rechts
    180° Der Bogen + Schatten ist grade nach links
    45° Der Bogen ist gebogen von der Ausgangsposition bis zur Endposition (Die Höhe des Bogens (Ja mann muss versuchen es 3D zu sehen) kann variieren von 0 (Der Bogen ist Ungebogen und kurz) bis z.b. 50 px höhe (Der Bogen ist Gebogen und länger))

    Boha kann sein das ich einwenig durcheinnander gekommen bin hoffe nicht ... es ist so sch**ßen kompliziert :wacko: Mein Kopf ist MATSCHE...

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Eistee“ ()

    Ich habs zwar noch nicht ganz verstanden, aber wenn du Koordinaten von einem Punkt berechnen willst, welcher in einem bestimmten Winkel zu einem anderem liegt, kannst du dir mal die Sinus-/Kosinus-Funktionen anschauen:
    schule-studium.de/Mathe/Sinus-im-Einheitskreis.html
    Du berechnest den Punkt P:alpha(x,y).
    Du musst allerdings eine Distanz zwischen den Punkten haben.
    Die Distanz ist dann die Hypotenuse.
    Der Sinus ist eigentlich nur das: Gegenkathete/Hypotenuse

    Da du die Hypotenuse hast, kannst du dir die Gegenkathete ausrechen:
    Math.Sin(winkel_im_bogenmaß)*distanz
    Das ist dann schon der (y-)Abstand vom ursprünglichem Punkt zum nächstem.

    Den x-Abstand kannst du dir mit Cosinus ausrechnen:
    Math.Cos(winkel_im_bogenmaß)*distanz

    Wenn dein Ausgangspunkt P(100|100) und die Distanz zwischen den Punkten 30px ein sollen, sieht das so aus:

    VB.NET-Quellcode

    1. dim ausgangspunkt as new point(100,100) 'ursprünglicher Punkt
    2. dim distanz as integer = 30 'Distanz festlegen
    3. dim winkel as single = math.pi/4 'das ist der Wert im Bogenmaß für 45°
    4. dim deltaX as integer = math.cos(winkel)*distanz 'Abstand heißt bei mir jetzt delta
    5. dim deltaY as integer = math.sin(winkel)*distanz 'Abstand heißt bei mir jetzt delta
    6. dim newpoint as new point(ausgangspunkt.x + deltaX,ausgangspunkt.y + deltaY) 'neuen Punkt definieren

    Lässt sich noch kürzen, so lässt es sich aber leichter lesen.
    Von meinem iPhone gesendet
    So es funktioniert fast Perfekt mann kann jetzt den Radius sowie Winkel mit der Scrollbar verändern
    nur es ist mir ein Rätsel warum ich nicht ganz rum komme (360°).

    Es ist bei ca. 350° schluss obwohl die MIN Value bei 0 und die MAX Value der Scrollbar 360 ist ?(
    Falls es jemand mal selber Probieren möchste siehe Anhang.

    Edit: Um das Problem mit dem fehlenden 10° zu beheben einfach LargeChange der Scrollbar auf 1 setzen.
    Dateien
    • Kurve.rar

      (61,62 kB, 203 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eistee“ ()

    Im Sourcecode habe ich ma ein Usercontrol Namens Diagramm reingestellt. Da werden Kurven mit DrawCurve und DrawLines gezeichnet. Kannst es dir ja ma anschauen. (Sub Kurve_Zeichnen). Is eigentlich ein einfaches Prinzip:
    1. Array(Point) oder Array(PointF) erstellen und
    2. mit den Punkten deiner Kurve füllen
    3. Graphics-Obekt erzeugen
    4. Graphics.DrawCurve(Pen, Array(PointF)
    5. Invalidate()
    feddich.
    Außerdem hab ich dir ma ne Klassenbibo angehängt mit Namen Koordinaten. Da kannste Polar- in Karthesische Koordinaten und umgekehrt rechnen.Koordinaten.zip Viel Spass beim testen.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Danke erstmal

    So viel Mathe an einen Tag.. und das freiwillig xD
    Also ich habe es jetzt nochmal mit Graphics.DrawCurve versucht


    VB.NET-Quellcode

    1. Graphics.DrawCurve (Stift_Orange,KurvePunkteArray, 50)


    Wie funktioniert das mit der "tension" richtig?

    Stelle mir das so vor das die Linie dadurch gebogen wird aber irgentwie will der nicht ^^
    Das KurvePunkteArray hat 2 Einträge

    VB.NET-Quellcode

    1. KurvePunkteArray(0)=Ausgangsposition
    2. KurvePunkteArray(1)=Errechnetes Ende


    Die Linie wird gezeichnet
    Die tension verlängert die Linie bei mir nur anstatt sie zu krümmen. Ist das Normal?

    Edit:
    Ok ich habs verstanden damit tension greift brauch man mindestens
    3 punkte die nicht auf einer linie liegen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eistee“ ()

    Hallo bin wieder da.. :D

    Da ich grade dabei bin mir das Einweisungsformular für die nahegelegene Nervenklink auszudrucken
    um mich selbst einzuweisen, wollte ich mal fragen ob nicht jemand lust mir zu helfen und die blöde kurve endlich zu vollenden.

    Ich bin schon so weit das die krumme Kurve PERFEKT erstellt/gezeichnet wird doch nun hänge ich beim Schatten fest
    die Schatten-Kurve wird zwar auch schon gezeichnet nur nicht im richtigen abstand zur echten Kurve in der bewegung.

    Falls intresse besteht einfach hier melden.

    Gruß Eistee

    Edit:
    Ok ich habe es jetzt geschafft 8-)
    Danke an alle!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Eistee“ ()