I made limitWallLenght()-function, but the line (code below) shakes and angle limit function doesn't work if wall length are smaller than 30 px. Can anyone help me?
Graphics 800,600,32,2 AppTitle "Angle Test" SetBuffer BackBuffer() Global GLOBAL_X1#, GLOBAL_Y1# Local Ax0# = 10, Ay0# = 10, Ax1# = 200, Ay1# = 200, Bx0# = 200, By0# = 200, Bx1# = 500, By1# = 500, angle# While Not KeyHit(1) Cls Bx1 = MouseX() By1 = MouseY() angle = getAngleOfTwoLines(Ax0, Ay0, Ax1, Ay1, Bx0, By0, Bx1, By1) If angle < 45 Then limitWallAngle(Ax0, Ay0, Ax1, Ay1, Bx0, By0, Bx1, By1, 45) limitWallLength(30, Bx0, By0, Bx1, By1) Bx1 = MouseX() By1 = MouseY() Line Ax0, Ay0, Ax1, Ay1 Line Bx0, By0, Bx1, By1 Flip Wend Function limitWallAngle(Ax0#, Ay0#, Ax1#, Ay1#, Bx0#, By0#, Bx1#, By1#, ang#) Local A_length#, B_length#, Vx#, Vy#, V_pituus#, Ux#, Uy#, Angle# B_length = Sqr((Bx1-Bx0)^2+(By1-By0)^2) Vx = Ax0 - Ax1 Vy = Ay0 - Ay1 V_pituus = B_length/Sqr(Vx^2+Vy^2) Vx=Vx*V_pituus Vy=Vy*V_pituus U0x = Vx * Cos(ang#) - Vy * Sin(ang#) U0y = Vy * Sin(ang#) + Vx * Cos(ang#) U1x = Vx * Cos(ang#) + Vy * Sin(ang#) U1y = Vy * Sin(ang#) - Vx * Cos(ang#) MX=MouseX()-Bx0 MY=MouseY()-By0 If ((U0x-MX)^2+(U0y-MY)^2)<((U1x-MX)^2+(U1y-MY)^2) GLOBAL_X1 = Bx0 + U0x GLOBAL_Y1 = By0 + U0y MoveMouse global_x1, global_y1 Else GLOBAL_X1 = Bx0 + U1x GLOBAL_Y1 = By0 - U1y MoveMouse global_x1, global_y1 EndIf End Function Function limitWallLength(min_length#, x0#, y0#, x1#, y1#, o_x% = 0, o_y% = 0) Local length_a#, length_b#, length_hypotenuse#, angle#, limit_x1#, limit_y1# length_b = x1 - x0 length_a = y1 - y0 length_hypotenuse = Sqr(length_a^2 + length_b^2) If length_hypotenuse < min_length angle = ASin(length_a/length_hypotenuse) length_hypotenuse = min_length If x1 < x0 length_a = -Cos(angle) * length_hypotenuse Else length_a = Cos(angle) * length_hypotenuse EndIf length_b = Sin(angle) * length_hypotenuse limit_x1 = x0 + length_a limit_y1 = y0 + length_b MoveMouse limit_x1 + o_x, limit_y1 + o_y EndIf End Function Function getAngleOfTwoLines(Ax#, Ay#, Bx#, By#, Cx#, Cy#, Dx#, Dy#) Local ACx#, ACy#, BCx#, BCy# Local dot_production#, angle# Local lengthAC#, lengthBC# ACx = Bx - Ax ACy = By - Ay BCx = Cx - Dx BCy = Cy - Dy dot_production = ACx * BCx + ACy * BCy lengthAC = Sqr(ACx^2 + ACy^2) lengthBC = Sqr(BCx^2 + BCy^2) angle = ACos(dot_production / (lengthAC * lengthBC)) Return angle# End Function