vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 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
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.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Dreieck zeichnen6.393Brauner23.11.12 12:19
Re: Dreieck zeichnen3.294ModeratorDaveS23.11.12 12:36
Re: Dreieck zeichnen3.366Manfred X23.11.12 14:33
Re: Dreieck zeichnen3.232Brauner23.11.12 17:51
Re: Dreieck zeichnen3.364Manfred X23.11.12 18:28
Re: Dreieck zeichnen3.211Brauner23.11.12 19:23
Re: Dreieck zeichnen3.147Brauner08.12.12 14:10
Re: Dreieck zeichnen3.186Manfred X08.12.12 17:16
Re: Dreieck zeichnen3.274Brauner09.12.12 09:41
Re: Dreieck zeichnen3.385Manfred X09.12.12 16:56
Re: Dreieck zeichnen3.088Brauner09.12.12 17:55
Re: Dreieck zeichnen3.162Brauner31.12.12 12:47

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