January 24, 2021, 12:24:00 PM
Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email
?
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
Home
Forum
Help
Search
Gallery
Login
Register
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
Algorithms
»
[bmx] Distance to line by Otus [ 1+ years ago ]
« previous
next »
Print
Pages: [
1
]
Go Down
Author
Topic: [bmx] Distance to line by Otus [ 1+ years ago ] (Read 704 times)
BlitzBot
Jr. Member
Posts: 1
[bmx] Distance to line by Otus [ 1+ years ago ]
«
on:
June 29, 2017, 12:28:38 AM »
Title :
Distance to line
Author :
Otus
Posted :
1+ years ago
Description :
I think this code is quite optimized.
The c code is a bit faster.
Code :
Code: BlitzMax
Function
DistanceToLineSegment:
Double
(
ax:
Double
,ay:
Double
,..
bx:
Double
,by:
Double
, px:
Double
,py:
Double
)
'Returns the distance from p to
' the closest point on line segment a-b.
Local
dx:
Double
=bx-ax
Local
dy:
Double
=by-ay
Local
t:
Double
=
(
(
py-ay
)
*dy +
(
px-ax
)
*dx
)
/
(
dy*dy + dx*dx
)
If
t<
0
dx=ax
dy=ay
ElseIf
t>
1
dx=bx
dy=by
Else
dx = ax+t*dx
dy = ay+t*dy
End
If
dx:-px
dy:-py
Return
Sqr
(
dx*dx + dy*dy
)
End
Function
Function
DistanceToLine:
Double
(
ax:
Double
,ay:
Double
, bx:
Double
,by:
Double
, px:
Double
,py:
Double
)
'Returns the distance from p to the closest point
' ont the line passing through a and b.
Local
dx:
Double
=bx-ax
Local
dy:
Double
=by-ay
Return
(
(
ay-py
)
*dx +
(
px-ax
)
*dy
)
/ Sqr
(
dy*dy + dx*dx
)
End
Function
'in.c:
double
dx;
double
dy;
double
t;
double
DistanceToLineSegment
(
double
ax,
double
ay,
double
bx,
double
by,
double
px,
double
py
)
{
dx = bx-ax;
dy = by-ay;
t =
(
(
py-ay
)
*dy +
(
px-ax
)
*dx
)
/
(
dy*dy + dx*dx
)
;
if
(
t<
0
)
{
ax-=px;
ay-=py;
return
sqrt
(
ax*ax + ay*ay
)
;
}
if
(
t>
1
)
{
bx-=px;
by-=py;
return
sqrt
(
bx*bx + by*by
)
;
}
ax+=t*dx-px;
ay+=t*dy-py;
return
sqrt
(
ax*ax + ay*ay
)
;
}
double
DistanceToLine
(
double
ax,
double
ay,
double
bx,
double
by,
double
px,
double
py
)
{
dx = bx-ax;
dy = by-ay;
return
(
(
ay-py
)
*dx +
(
px-ax
)
*dy
)
/ sqrt
(
dy*dy + dx*dx
)
;
}
Comments :
none...
Logged
Print
Pages: [
1
]
Go Up
« previous
next »
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
Algorithms
»
[bmx] Distance to line by Otus [ 1+ years ago ]
SimplePortal 2.3.6 © 2008-2014, SimplePortal