vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Dreieck zeichnen 
Autor: Brauner
Datum: 23.11.12 12:19

Hallo,

wie bekomme ich das hin, das z.Bsp. der Wert summe
aus dem Prog. als ein Punkt(hier x) in der Picturebox dargestellt wird ?
summe ist hier jetzt 0. Wie muß ich denn das Argument richtig übergeben?

Besten Dank. mfg brauner
Imports System.IO
Imports System.Drawing.Drawing2D
 
Public Class Form1
 
    Public seitea, seiteb, seitec As Double
    Public summe As Single
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        seitea = Val(TextBox1.Text)
        seiteb = Val(TextBox2.Text)
        seitec = Val(TextBox3.Text)
        Call dreieck(seitea, seiteb, seitec)
    End Sub
    Function dreieck(ByVal seitea As Double, ByVal seiteb As Double, ByVal _
      seitec As Double) As Double
        summe = (seitea + seiteb + seitec) / 2
        TextBox4.Text = Math.Round(summe, 3)
        Return seitea
    End Function
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim g As Graphics = e.Graphics
        PictureBox1.BackColor = Color.Yellow
        g.DrawLine(Pens.Black, 100, 100, 200, 200)
        g.DrawLine(Pens.Black, summe, 100, 200, 200)
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: ModeratorDaveS (Moderator)
Datum: 23.11.12 12:36

Bitte die Codetags benutzen, damit dein Code lesbar wird. Danke.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Manfred X
Datum: 23.11.12 14:33

Hallo!

Was genau ist die Frage?

Erforderliche Arbeitsschritte:

Zunächst mußt Du sicherstellen, dass in den Textboxen
numerische Werte (positiv?) stehen (Double.Tryparse-Methode)

Im nächsten Schritt mußt Du aus den gegebenen Längen-Verhältnissen
die Winkel des Dreiecks bestimmen (Anwendung der Trigonometrie).

Dann legst Du die Position von zwei Dreiecks-Ecken in der Picturebox fest
(Länge einer Seite) und bestimmst die relative Position der dritten Ecke
aus den Winkeln.

Diese Positionen verwendest Du nun, um die drei Linien zwischen diesen
Punkten zu zeichnen (z.B. Polygon).

MfG
Manfred

Beitrag wurde zuletzt am 23.11.12 um 14:37:30 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 23.11.12 17:51

Hallo Manfred,

das ist soweit verstanden.
Aber wenn ich den Button betätige,
wird der berechnete Wert Summe nicht wirklich im paint ereignis übernommen. Der ist immer null.
mfg brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Manfred X
Datum: 23.11.12 18:28

Probier mal so!
Du mußt das Neuzeichnen anfordern (Invalidate).

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As  _
      System.EventArgs) Handles btnDraw.Click
        seitea = Val(textbox1.Text)
        seiteb = Val(textbox2.Text)
        seitec = Val(textbox3.Text)
        Call dreieck(seitea, seiteb, seitec)
        Picturebox1.Invalidate()
    End Sub
 
    Sub dreieck(ByVal seitea As Double, ByVal seiteb As Double, ByVal _
        seitec As Double)
        summe = CSng((seitea + seiteb + seitec) / 2)
        TextBox4.Text = Math.Round(summe, 3)
        Return
    End Sub
 
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As  _
      System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim g As Graphics = e.Graphics
        g.Clear(Color.Yellow)
        g.DrawLine(Pens.Black, 100, 100, 200, 200)
        g.DrawLine(Pens.Black, CInt(summe), 100, 200, 200)
    End Sub


Beitrag wurde zuletzt am 23.11.12 um 18:30:52 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 23.11.12 19:23

Hallo, Manfred,

so klappt es. Danke !
mfg brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 08.12.12 14:10

Hallo, Manfred,

was kann ich machen,
wenn die Linie länger ist wie die Picturebox breit,
dann wird das Dreieck nicht wirklich richtig angezeigt.
Muß ich das umrechnen, millimeter in pixel o.ä.
danke.
brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Manfred X
Datum: 08.12.12 17:16

Hallo!

Was bedeutet: "Nicht wirklich richtig"?

Du hast verschiedene Optionen für diesen Fall:

1. Das Dreieck wird unvollständig angezeigt

2. Alle Pixelpositionen der Bildpunkte werden so
auf eine Skala umgerechnet, dass sie in die vorhandene
Breite/Höhe der Picturebox passen
-- die Zeichnung wird kleiner und weniger genau.

3. Du zeichnest in eine Bitmap, die die erforderliche Größe
besitzt, um alle Zeichnungselemente vollständig einzutragen
und weist diese Bitmap auf die Image-Eigenschaft der Picturebox zu
(Anzeigemodus / Sizemode wählbar).

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 09.12.12 09:41

Guten Morgen.

Ich meine das so:

Wenn ich eine Seitenlänge in die textbox eingebe,
z.Bsp. 1200 mm, dann die Breite der picturebox nicht ausreicht,
die Länge anzuzeigen.

"in eine bitmap zeichnen ... "
Wird dann die o.a, Linie "eingepasst" ?
oder muß ich das umrechnen?
mfg brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Manfred X
Datum: 09.12.12 16:56

Hallo!

Ohne genauere Angaben, was Du erreichen willst, ist es kaum
möglich, Dir gezielte Hinweise zu geben.

Gibt es z.B. ein festes Koordinatensystem mit vorgegebenem Nullpunkt,
in dem das Dreieck positioniert werden soll?

Soll die Größe der Darstellung auf dem Bildschirm der "Originalgröße"
entsprechen? Oder können Skalen an die Größenverhältnissen der
Zeichnungselemente angepaßt werden?

Vielleicht hilft dieses Beispiel weiter.
Maßstab: Pixel
Die Bitmap-Größe wird an die Position des Dreiecks angepaßt.
Picturebox-Sizeimage steht auf Zoom - automatische Anpassung.
Schau Dir auch mal die Transform-Methode des Graphics-Objects an.

Option Strict On : Option Explicit On
Public Class frmTriangle
 
    Dim pn As New Panel With _
        {.Parent = Me, .Top = 50, .Width = 400, .Height = 300}
    Dim pb As New PictureBox With _
        {.Parent = pn, .SizeMode = PictureBoxSizeMode.Zoom, .Dock = _
        DockStyle.Fill}
 
    Dim tba As New TextBox With _
        {.Parent = Me, .Top = 0, .Width = 80}
    Dim tbb As New TextBox With _
        {.Parent = Me, .Top = 0, .Left = 100, .Width = 80}
    Dim tbc As New TextBox With _
        {.Parent = Me, .Top = 0, .Left = 200, .Width = 80}
 
    Dim WithEvents btnDraw As New Button With _
       {.Parent = Me, .Left = 300, .Text = "Draw"}
 
    Dim pos1, pos2, pos3 As Point
 
    Private Sub frmTriangle_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.Width = 400 : Me.Height = 400
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Fixed3D
        Me.Text = "Seitenlängen a,b,c eingeben --   a + b => c"
        tba.Text = CStr(100) : tbb.Text = CStr(120) : tbc.Text = CStr(150)
    End Sub
 
 
    Private Sub btnDraw_Click(sender As Object, _
        e As System.EventArgs) Handles btnDraw.Click
 
        Dim a, b, c As Integer, ok As Boolean = True
        'Eingaben checken 
        If Not Integer.TryParse(tba.Text, a) Then Exit Sub
        If Not Integer.TryParse(tbb.Text, b) Then Exit Sub
        If Not Integer.TryParse(tbc.Text, c) Then Exit Sub
 
        'Kosinussatz anwenden
        Dim cosval As Double = (a * a - (b * b + c * c)) / (-2 * b * c)
        Dim alpha As Double = Math.Acos(cosval)
        'Definieren Seitenlängen ein Dreieck? 
        If Double.IsNaN(alpha) Then
            MsgBox("Ungeeignete Eingabe", MsgBoxStyle.Exclamation) : Exit Sub
        End If
 
        'Zwei Punkte festlegen
        pos1 = New Point(100, 100)
        pos2 = New Point(100 + CInt(b), 100)
 
        'Position des 3. Punktes gemäß obigem Winkel bestimmen 
        pos3 = New Point(pos1.X + CInt(Math.Cos(alpha) * c), _
                         pos1.Y + CInt(Math.Sin(alpha) * c))
 
        Dim xmax As Integer = CInt(Math.Max(pos2.X, pos3.X) + 50)
        Dim ymax As Integer = CInt(Math.Max(pos2.Y, pos3.Y) + 50)
 
        'Überprüfung der Punkte-Position: 
        'Euklidische Distanz zum dritten Punkt berechnen
        Dim diff1 As Integer = _
            CInt(Math.Sqrt((pos1.X - pos3.X) ^ 2 + (pos1.Y - pos3.Y) ^ 2))
        If Math.Abs(diff1 - c) > 2 Then ok = False
        Dim diff2 As Integer = _
            CInt(Math.Sqrt((pos2.X - pos3.X) ^ 2 + (pos2.Y - pos3.Y) ^ 2))
        If Math.Abs(diff2 - a) > 2 Then ok = False
 
        If Not ok Then
            MsgBox("Berechnungsfehler", MsgBoxStyle.Exclamation)
        Else
            Using bmp As New Bitmap(xmax, ymax), _
                gr As Graphics = Graphics.FromImage(bmp)
                gr.Clear(Color.White)
 
                'Dreieck Zeichnen
                gr.FillPolygon _
                 (New SolidBrush(Color.Red), New Point() {pos1, pos2, pos3})
 
                gr.DrawPolygon _
                  (New Pen(Color.Blue, 3), New Point() {pos1, pos2, pos3})
 
                'Dreieck anzeigen
                pb.Image = CType(bmp.Clone, Image)
            End Using
        End If
    End Sub
 
 End Class


Beitrag wurde zuletzt am 09.12.12 um 17:24:17 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 09.12.12 17:55

Besten Dank, Manfred,

wenn ich nicht zurecht komme, melde ich mich.
LG brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dreieck zeichnen 
Autor: Brauner
Datum: 31.12.12 12:47

Hallo,

wenn die Dreicksseiten größer werden: ca. 1000 o.ä.
dann werden die Linienstärken schwächer dargestellt.
Kann man die Linienstärke irgendwie anpassen.
mit "DIM Pen1 as Newpen(color.black,4)"
komme ich nicht weiter, weil dann bei kleinen Dreiecken die Linienstärke
zu dick erscheint.

mfgb brauner
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel