Find the intersection of two lines: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 1,103: | Line 1,103: | ||
<pre> |
<pre> |
||
(x 5.0 y 5.0) |
(x 5.0 y 5.0) |
||
</pre> |
|||
=={{header|EMal}}== |
|||
<syntaxhighlight lang="emal"> |
|||
type Intersection |
|||
model |
|||
Point point |
|||
fun asText = <|when(me.point == null, "No intersection", me.point.asText()) |
|||
end |
|||
type Point |
|||
model |
|||
real x, y |
|||
fun asText = <|"(" + me.x + "," + me.y + ")" |
|||
end |
|||
type Line |
|||
model |
|||
Point s,e |
|||
end |
|||
type Main |
|||
fun getIntersectionByLines = Intersection by Line n1, Line n2 |
|||
real a1 = n1.e.y - n1.s.y |
|||
real b1 = n1.s.x - n1.e.x |
|||
real c1 = a1 * n1.s.x + b1 * n1.s.y |
|||
real a2 = n2.e.y - n2.s.y |
|||
real b2 = n2.s.x - n2.e.x |
|||
real c2 = a2 * n2.s.x + b2 * n2.s.y |
|||
real delta = a1 * b2 - a2 * b1 |
|||
if delta == 0 do return Intersection() end |
|||
return Intersection(Point((b2 * c1 - b1 * c2) / delta, (a1 * c2 - a2 * c1) / delta)) |
|||
end |
|||
Line n1 = Line(Point(4, 0), Point(6, 10)) |
|||
Line n2 = Line(Point(0, 3), Point(10, 7)) |
|||
writeLine(getIntersectionByLines(n1, n2)) |
|||
n1 = Line(Point(0, 0), Point(1, 1)) |
|||
n2 = Line(Point(1, 2), Point(4, 5)) |
|||
writeLine(getIntersectionByLines(n1, n2)) |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
(5.0,5.0) |
|||
No intersection |
|||
</pre> |
</pre> |
||