vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

Visual-Basic Einsteiger
Re: Auf eine Linie klicken 
Autor: Zardoz
Datum: 13.05.03 19:20

Hallo Christoph,
man kann das Ganze auch berechnen. Dazu braucht man aber keine höheren
mathematischen Funktionen. Vermutlich ist das die beste Methode:
'Benötigt werden: 1 Picturebox, 1 Label
Option Explicit
 
Private X1!(), Y1!(), X2!(), Y2!(), a!(), b!(), L%
 
Private Sub Form_Activate()
 
Dim i%, SW%, SH%, DX!, DY!
 
L = 20 'Linien
Me.ScaleMode = 3
Randomize
ReDim X1(L - 1), Y1(L - 1), X2(L - 1), Y2(L - 1), a(L - 1), b(L - 1)
With Picture1
.ScaleMode = 3
.BackColor = vbBlack
.Move 10, 10, 400, 300
Label1.Move .Left + .Width + 10, 10
.AutoRedraw = True
SW = .ScaleWidth
SH = .ScaleHeight
For i = 0 To L - 1
  Do
    X1(i) = Int(Rnd * SW)
    Y1(i) = Int(Rnd * SH)
    X2(i) = Int(Rnd * SW)
    Y2(i) = Int(Rnd * SH)
    DX = X2(i) - X1(i)
    DY = Y2(i) - Y1(i)
  Loop While DX = 0 And DY = 0
  If Abs(DX) > Abs(DY) Then
    a(i) = DY / DX
    b(i) = Y1(i) - a(i) * X1(i)
  Else
    a(i) = DX / DY
    b(i) = X1(i) - a(i) * Y1(i)
  End If
  Picture1.Line (X1(i), Y1(i))-(X2(i), Y2(i)), Rnd * vbWhite
Next i
End With
'y1=a*x1+b
'y2=a*x2+b
'b=y1-a*x1
'a=(y2-y1)/(x2-x1)
 
End Sub
 
Private Sub Form_Click()
  Unload Me
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
  End
End Sub
 
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
 
Dim i%, MausX!, MausY!, RX!, RY!, Sens%
 
MausX = X
MausY = Y
Sens = 5 'Genauigkeit
Label1.Caption = "Nichts"
For i = 0 To L - 1
  If Abs(X2(i) - X1(i)) > Abs(Y2(i) - Y1(i)) Then
    If (MausX >= X1(i) And MausX <= X2(i)) Or _
      (MausX >= X2(i) And MausX <= X1(i)) Then
      RY = a(i) * MausX + b(i)
      If Abs(RY - MausY) < Sens Then
        Label1.Caption = "Linie " & i
        Exit For
      End If
    End If
  ElseIf (MausY >= Y1(i) And MausY <= Y2(i)) Or _
    (MausY >= Y2(i) And MausY <= Y1(i)) Then
    RX = a(i) * MausY + b(i)
    If Abs(RX - MausX) < Sens Then
      Label1.Caption = "Linie " & i
      Exit For
    End If
  End If
Next i
 
End Sub

Gruß

Zardoz
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Auf eine Linie klicken2.337Christoph7509.05.03 13:15
Re: Auf eine Linie klicken1.470mst54709.05.03 13:26
Re: Auf eine Linie klicken1.405Christoph7509.05.03 15:15
Re: Auf eine Linie klicken191Zardoz09.05.03 22:37
Re: Auf eine Linie klicken1.369Christoph7512.05.03 10:08
Re: Auf eine Linie klicken159Zardoz13.05.03 01:17
Re: Auf eine Linie klicken1.429Christoph7513.05.03 15:16
Re: Auf eine Linie klicken279Zardoz13.05.03 19:20
Re: Auf eine Linie klicken1.427Christoph7514.05.03 15:16

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-2025 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