Seite 1 von 1

Schnittwinkel oder wie auch immer das heißt berechnen ?

Verfasst: 28.11.2017 17:51
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 :)

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

Verfasst: 28.11.2017 18:09
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.

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

Verfasst: 28.11.2017 18:17
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

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

Verfasst: 28.11.2017 18:22
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?

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

Verfasst: 28.11.2017 18:24
von Darky
Start und End koordinaten ... Sorry bin total nix wissend was winkelberechnung etc. angeht :-s

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

Verfasst: 28.11.2017 18:28
von Darky
sprich

Start.X
Start.Y

End.X
End.Y

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

Verfasst: 28.11.2017 19:06
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

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

Verfasst: 28.11.2017 19:08
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 :-)

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

Verfasst: 28.11.2017 19:19
von man-in-black
Hey,

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

MFG
MIB

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

Verfasst: 28.11.2017 19:46
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