Schnittwinkel oder wie auch immer das heißt berechnen ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

Hallo Leute,Nach JAHRELANGEM nicht posten merke ich das auch meine Kenntnisse irgendwann verstauben und habe das Problem bei folgender Berechnung :
ich muss einen Strich zeichnen und dazu die auf dem Bild in Rot markierten Striche logischerweise
im Winkel zum Strich zeichnen !?????
Irgendwie komm ich nicht mehr drauf wie das ging oder hieß ,


Kann mir das jemand mal in "Nicht Mathematiker Sprache" erklären und sagen wie das heißt was ich suche ? :-D Schnittwinkel oder wie ?

Bild

wäre euch sehr verbunden für eure Hilfe.


Nette grüße aus Gelsenkirchen


Darky :)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von NicTheQuick »

Du meinst die roten Striche sollen rechtwinklig zum schwarzen sein? In 2D ist das einfach. Einfach x- und y-Steigung vertauschen und eins davon negieren.
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

Ja geht nur um 2D hast denn da auch ein Beispiel ? :-s

(Edit) bzw: Gehts auch in einer Sprache für Leute ohne Mathe Erfahrung :-D
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von NicTheQuick »

Du hast ja nicht mal gesagt, was du hast. Außer einen Strich. In welcher Form hast du den denn? Aufpunkt und Richtungsvektor? Start- und Endkoordinate?
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

Start und End koordinaten ... Sorry bin total nix wissend was winkelberechnung etc. angeht :-s
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

sprich

Start.X
Start.Y

End.X
End.Y
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von man-in-black »

Hi,

ich habe jetzt einfach mal q&d (auf Events und Co bezogen) etwas zusammengeschrieben.
Lass dich nicht von der Vektoranlehnung irritieren, die macht den Code eigentlich sogar übersichtlicher/verständlicher.
Die mathematische Erklärung findest du auf diversen Seiten besser erklärt, als ich es könnte.
Der Code soll dir nur beim "Spielen" helfen. ;)

//guck dir am besten erst die letzte Procedure an und hangel dich dann aufwärts

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

Enumeration window
  #DB_Window_main
EndEnumeration

Structure db_struc_mouse
  mx.i
  my.i
EndStructure

Global db_mouse.db_struc_mouse

Structure point2
  x.f
  y.f
EndStructure

Procedure length(p1x.f,p1y.f,p2x.f,p2y.f)
  ProcedureReturn Sqr(Pow(p2x-p1x,2)+Pow(p2y-p1y,2))   ;Pytagoras, um aus der Differenz in x und y die Länge der Resultierenden zu bekommen
EndProcedure  

Procedure calcRate(*out_rate.point2,p1x.f,p1y.f,p2x.f,p2y.f)  ;Steigung in den Dimensionen x,y getrennt (a la Vektor)
  
  *out_rate\x = p2x-p1x         ;Differenz in x-Richtung
  *out_rate\y = p2y-p1y         ;Differenz in y-Richtung

EndProcedure  

Procedure calcNormOrthRate(*out_rate.point2,p1x.f,p1y.f,p2x.f,p2y.f) ;Senkrechte zur Steigung der beiden Streckenpunkte (genormt s.unten)
  
  *out_rate\y = (-p2x+p1x)/length(p1x.f,p1y.f,p2x.f,p2y.f)
  *out_rate\x = (p2y-p1y)/length(p1x.f,p1y.f,p2x.f,p2y.f)
     
EndProcedure

Procedure DrawOrthLines(*orthRate.point2,px.f,py.f,lengthOrth.f)   ;hier einfach die halbe Steigung*Wunschlänge "vor" und "hinter" die Maus-/Fixpunktposition als Streckenstart ermitteln
  
  LineXY(px-lengthOrth/2**orthRate\x,py-lengthOrth/2**orthRate\y,px+lengthOrth/2**orthRate\x,py+lengthOrth/2**orthRate\y,$00FF00)
    
  
EndProcedure  

Procedure drawLines(px.f,py.f,lengthOrth.f)
  
  LineXY(db_mouse\mx,db_mouse\my,px,py,$FF00FF)     ;oder auch hier mit calcRate und line arbeiten
  
  calcNormOrthRate(@orthRate.point2,db_mouse\mx,db_mouse\my,px,py)   ;aus der Mausposition und einer fixen Position (hier Fenstermitte) die Steigung + die Orthogonale (Senkrechte) ausrechnen
                                                                     ;die Steigung ist zudem genormt (Länge des Vektors ist 1), damit man einfach seine Wunschlänge draufmultiplizieren kann  
  
  DrawOrthLines(@orthRate.point2,db_mouse\mx,db_mouse\my,lengthOrth) ;eine Linie von der Maus aus zeichnen
  DrawOrthLines(@orthRate.point2,px,py,lengthOrth)                   ;eine Linie von dem fixen Punkt aus zeichnen
  
EndProcedure

OpenWindow(#DB_Window_main,0,0,800,600,"",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#DB_Window_main),0,0,800,600,#True,0,0,#PB_Screen_NoSynchronization)

Repeat
  
  While WindowEvent()
  Wend
  ClearScreen($AAAAAA)
  
  StartDrawing(ScreenOutput())
    Box(db_mouse\mx,db_mouse\my,5,5,$0000FF)

    drawLines(400,300,100)
  
  StopDrawing()
  
  FlipBuffers()

  ExamineKeyboard()
  
  If KeyboardPushed(#PB_Key_Escape)
    db_quit = #True
  EndIf
  
  ExamineMouse()
  
  db_mouse\mx = WindowMouseX(#DB_Window_main);MouseX()
  db_mouse\my = WindowMouseY(#DB_Window_main);MouseY()
  
Until db_quit = #True
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

Dankeschön kannst du mir auch noch sagen wie man das ganze richtig nennt ? um den Thread richtig zu benennen und mich etwas da einzulesen :-)
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von man-in-black »

Hey,

"Orthogonalität"; "Orthogonale zu Vektor"; "Senkrechte auf Linie"; ... suchs dir aus ;)

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Schnittwinkel oder wie auch immer das heißt berechnen ?

Beitrag von Darky »

Vielen Dank :-) Super !!!!!!!!!!!!!!!!! :bounce: :bounce: :bounce: :bounce: :bounce: dann hab ich 1 stunde ganz falsch gesucht , problem ist gelöst (y)



1 Mio Dank an euch
Antworten