In T-SQL codiert
Der Punkt ist (@px, @py) und das Linienstück verläuft von (@ax, @ay) nach (@bx, @by)
create function fn_sqr (@NumberToSquare decimal(18,10))
returns decimal(18,10)
as
begin
declare @Result decimal(18,10)
set @Result = @NumberToSquare * @NumberToSquare
return @Result
end
go
create function fn_Distance(@ax decimal (18,10) , @ay decimal (18,10), @bx decimal(18,10), @by decimal(18,10))
returns decimal(18,10)
as
begin
declare @Result decimal(18,10)
set @Result = (select dbo.fn_sqr(@ax - @bx) + dbo.fn_sqr(@ay - @by) )
return @Result
end
go
create function fn_DistanceToSegmentSquared(@px decimal(18,10), @py decimal(18,10), @ax decimal(18,10), @ay decimal(18,10), @bx decimal(18,10), @by decimal(18,10))
returns decimal(18,10)
as
begin
declare @l2 decimal(18,10)
set @l2 = (select dbo.fn_Distance(@ax, @ay, @bx, @by))
if @l2 = 0
return dbo.fn_Distance(@px, @py, @ax, @ay)
declare @t decimal(18,10)
set @t = ((@px - @ax) * (@bx - @ax) + (@py - @ay) * (@by - @ay)) / @l2
if (@t < 0)
return dbo.fn_Distance(@px, @py, @ax, @ay);
if (@t > 1)
return dbo.fn_Distance(@px, @py, @bx, @by);
return dbo.fn_Distance(@px, @py, @ax + @t * (@bx - @ax), @ay + @t * (@by - @ay))
end
go
create function fn_DistanceToSegment(@px decimal(18,10), @py decimal(18,10), @ax decimal(18,10), @ay decimal(18,10), @bx decimal(18,10), @by decimal(18,10))
returns decimal(18,10)
as
begin
return sqrt(dbo.fn_DistanceToSegmentSquared(@px, @py , @ax , @ay , @bx , @by ))
end
go
--Beispiel für die Entfernung von einem Punkt bei (6,1) zu einem Linienstück, das von (4,2) nach (2,1) verläuft
select dbo.fn_DistanceToSegment(6, 1, 4, 2, 2, 1)
--Ergebnis = 2.2360679775
--Beispiel für die Entfernung von einem Punkt bei (-3,-2) zu einem Linienstück, das von (0,-2) nach (-2,1) verläuft
select dbo.fn_DistanceToSegment(-3, -2, 0, -2, -2, 1)
--Ergebnis = 2.4961508830
--Beispiel für die Entfernung von einem Punkt bei (0,-2) zu einem Linienstück, das von (0,-2) nach (-2,1) verläuft
select dbo.fn_DistanceToSegment(0,-2, 0, -2, -2, 1)
--Ergebnis = 0.0000000000
0 Stimmen
Ich weiß nicht, wie du Linien und Punkte darstellst, aber hier findest du die gesamte Mathematik, die du benötigst, um anzufangen. Es sollte nicht allzu schwer sein, herauszufinden, was du tun musst.
0 Stimmen
Kann die Antwort auf diese Frage behoben/geändert werden? Derzeit bezieht sie sich nicht auf die Frage (den Abschnitt), sondern auf eine Zeile.
4 Stimmen
@ArthurKalliokoski: Dieser Link ist tot, aber ich habe eine Kopie gefunden: paulbourke.net/geometry/pointline
0 Stimmen
Muss das selbst suchen und bin zufällig auf dies von Google gestoßen - wenn jemand nach einer Implementierung sucht und mit Python gehen kann, hat Shapely dies. Du suchst nach der
LineString
Klasse für den Pfad.12 Stimmen
@GuntherStruyf: Dieser Link ist auch tot, aber dieser ähnliche Link funktioniert: paulbourke.net/geometry/pointlineplane
1 Stimmen
Wenn jemand nach dem Abstand zwischen einem Punkt und einer Linie sucht, nicht zwischen einem Punkt und einem Liniensegment, sehen Sie sich diesen Link an: gist.github.com/rhyolight/2846020
1 Stimmen
Der obige Link ist tot. Hier ist Pseudocode und ein C++ Beispiel, erklärt und so ausführlich wie in einem Lehrbuch abgeleitet, geomalgorithms.com/a02-_lines.html
0 Stimmen
brilliant.org/wiki/…