Skip to content

Commit

Permalink
interval intersection
Browse files Browse the repository at this point in the history
  • Loading branch information
noinia committed Jan 2, 2024
1 parent 447e447 commit 5b7e45b
Show file tree
Hide file tree
Showing 8 changed files with 486 additions and 40 deletions.
356 changes: 356 additions & 0 deletions hgeometry/data/test-with-ipe/LineSegment/Intersection/open_bug.ipe
Original file line number Diff line number Diff line change
@@ -0,0 +1,356 @@
<?xml version="1.0"?>
<!DOCTYPE ipe SYSTEM "ipe.dtd">
<ipe version="70218" creator="Ipe 7.2.28">
<info created="D:20211210235158" modified="D:20240101170929"/>
<ipestyle name="basic">
<symbol name="arrow/arc(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/farc(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/ptarc(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/fptarc(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="mark/circle(sx)" transformations="translations">
<path fill="sym-stroke">
0.6 0 0 0.6 0 0 e
0.4 0 0 0.4 0 0 e
</path>
</symbol>
<symbol name="mark/disk(sx)" transformations="translations">
<path fill="sym-stroke">
0.6 0 0 0.6 0 0 e
</path>
</symbol>
<symbol name="mark/fdisk(sfx)" transformations="translations">
<group>
<path fill="sym-fill">
0.5 0 0 0.5 0 0 e
</path>
<path fill="sym-stroke" fillrule="eofill">
0.6 0 0 0.6 0 0 e
0.4 0 0 0.4 0 0 e
</path>
</group>
</symbol>
<symbol name="mark/box(sx)" transformations="translations">
<path fill="sym-stroke" fillrule="eofill">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
-0.4 -0.4 m
0.4 -0.4 l
0.4 0.4 l
-0.4 0.4 l
h
</path>
</symbol>
<symbol name="mark/square(sx)" transformations="translations">
<path fill="sym-stroke">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
</path>
</symbol>
<symbol name="mark/fsquare(sfx)" transformations="translations">
<group>
<path fill="sym-fill">
-0.5 -0.5 m
0.5 -0.5 l
0.5 0.5 l
-0.5 0.5 l
h
</path>
<path fill="sym-stroke" fillrule="eofill">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
-0.4 -0.4 m
0.4 -0.4 l
0.4 0.4 l
-0.4 0.4 l
h
</path>
</group>
</symbol>
<symbol name="mark/cross(sx)" transformations="translations">
<group>
<path fill="sym-stroke">
-0.43 -0.57 m
0.57 0.43 l
0.43 0.57 l
-0.57 -0.43 l
h
</path>
<path fill="sym-stroke">
-0.43 0.57 m
0.57 -0.43 l
0.43 -0.57 l
-0.57 0.43 l
h
</path>
</group>
</symbol>
<symbol name="arrow/fnormal(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/pointed(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/fpointed(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/linear(spx)">
<path stroke="sym-stroke" pen="sym-pen">
-1 0.333 m
0 0 l
-1 -0.333 l
</path>
</symbol>
<symbol name="arrow/fdouble(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
-1 0 m
-2 0.333 l
-2 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/double(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
-1 0 m
-2 0.333 l
-2 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-normal(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0.5 0 m
-0.5 0.333 l
-0.5 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-fnormal(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0.5 0 m
-0.5 0.333 l
-0.5 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-pointed(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0.5 0 m
-0.5 0.333 l
-0.3 0 l
-0.5 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-fpointed(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0.5 0 m
-0.5 0.333 l
-0.3 0 l
-0.5 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-double(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
1 0 m
0 0.333 l
0 -0.333 l
h
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/mid-fdouble(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
1 0 m
0 0.333 l
0 -0.333 l
h
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<anglesize name="22.5 deg" value="22.5"/>
<anglesize name="30 deg" value="30"/>
<anglesize name="45 deg" value="45"/>
<anglesize name="60 deg" value="60"/>
<anglesize name="90 deg" value="90"/>
<arrowsize name="large" value="10"/>
<arrowsize name="small" value="5"/>
<arrowsize name="tiny" value="3"/>
<color name="blue" value="0 0 1"/>
<color name="brown" value="0.647 0.165 0.165"/>
<color name="darkblue" value="0 0 0.545"/>
<color name="darkcyan" value="0 0.545 0.545"/>
<color name="darkgray" value="0.663"/>
<color name="darkgreen" value="0 0.392 0"/>
<color name="darkmagenta" value="0.545 0 0.545"/>
<color name="darkorange" value="1 0.549 0"/>
<color name="darkred" value="0.545 0 0"/>
<color name="gold" value="1 0.843 0"/>
<color name="gray" value="0.745"/>
<color name="green" value="0 1 0"/>
<color name="lightblue" value="0.678 0.847 0.902"/>
<color name="lightcyan" value="0.878 1 1"/>
<color name="lightgray" value="0.827"/>
<color name="lightgreen" value="0.565 0.933 0.565"/>
<color name="lightyellow" value="1 1 0.878"/>
<color name="navy" value="0 0 0.502"/>
<color name="orange" value="1 0.647 0"/>
<color name="pink" value="1 0.753 0.796"/>
<color name="purple" value="0.627 0.125 0.941"/>
<color name="red" value="1 0 0"/>
<color name="seagreen" value="0.18 0.545 0.341"/>
<color name="turquoise" value="0.251 0.878 0.816"/>
<color name="violet" value="0.933 0.51 0.933"/>
<color name="yellow" value="1 1 0"/>
<dashstyle name="dash dot dotted" value="[4 2 1 2 1 2] 0"/>
<dashstyle name="dash dotted" value="[4 2 1 2] 0"/>
<dashstyle name="dashed" value="[4] 0"/>
<dashstyle name="dotted" value="[1 3] 0"/>
<gridsize name="10 pts (~3.5 mm)" value="10"/>
<gridsize name="14 pts (~5 mm)" value="14"/>
<gridsize name="16 pts (~6 mm)" value="16"/>
<gridsize name="20 pts (~7 mm)" value="20"/>
<gridsize name="28 pts (~10 mm)" value="28"/>
<gridsize name="32 pts (~12 mm)" value="32"/>
<gridsize name="4 pts" value="4"/>
<gridsize name="56 pts (~20 mm)" value="56"/>
<gridsize name="8 pts (~3 mm)" value="8"/>
<opacity name="10%" value="0.1"/>
<opacity name="30%" value="0.3"/>
<opacity name="50%" value="0.5"/>
<opacity name="75%" value="0.75"/>
<pen name="fat" value="1.2"/>
<pen name="heavier" value="0.8"/>
<pen name="ultrafat" value="2"/>
<symbolsize name="large" value="5"/>
<symbolsize name="small" value="2"/>
<symbolsize name="tiny" value="1.1"/>
<textsize name="Huge" value="\Huge"/>
<textsize name="LARGE" value="\LARGE"/>
<textsize name="Large" value="\Large"/>
<textsize name="footnote" value="\footnotesize"/>
<textsize name="huge" value="\huge"/>
<textsize name="large" value="\large"/>
<textsize name="small" value="\small"/>
<textsize name="tiny" value="\tiny"/>
<textstyle name="center" begin="\begin{center}" end="\end{center}"/>
<textstyle name="item" begin="\begin{itemize}\item{}" end="\end{itemize}"/>
<textstyle name="itemize" begin="\begin{itemize}" end="\end{itemize}"/>
<tiling name="falling" angle="-60" step="4" width="1"/>
<tiling name="rising" angle="30" step="4" width="1"/>
</ipestyle>
<ipestyle name="frank">
<arrowsize name="huge" value="10"/>
<arrowsize name="large" value="8"/>
<arrowsize name="normal" value="5"/>
<arrowsize name="small" value="3"/>
<arrowsize name="tiny" value="1"/>
<dashstyle name="dash dot dotted" value="[4 2 1 2 1 2] 0"/>
<dashstyle name="dash dotted" value="[4 2 1 2] 0"/>
<dashstyle name="dashed" value="[2 2] 0"/>
<dashstyle name="dotted" value="[0.5 1] 0"/>
<gridsize name="1 pts" value="1"/>
<gridsize name="2 pts" value="2"/>
</ipestyle>
<ipestyle name="opacities">
<opacity name="10%" value="0.1"/>
<opacity name="20%" value="0.2"/>
<opacity name="30%" value="0.3"/>
<opacity name="40%" value="0.4"/>
<opacity name="50%" value="0.5"/>
<opacity name="60%" value="0.6"/>
<opacity name="70%" value="0.7"/>
<opacity name="80%" value="0.8"/>
<opacity name="90%" value="0.9"/>
</ipestyle>
<page>
<layer name="alpha"/>
<view layers="alpha" active="alpha"/>
<path layer="alpha" stroke="black">
16 96 m
80 16 l
</path>
<path stroke="black" arrow="normal/normal" rarrow="normal/normal">
48 56 m
56 16 l
</path>
<path stroke="black" arrow="normal/normal" rarrow="normal/normal">
48 56 m
31 28 l
</path>
<path stroke="black" arrow="normal/normal" rarrow="normal/normal">
48 56 m
14 0 l
</path>
</page>
</ipe>
10 changes: 5 additions & 5 deletions hgeometry/kernel/src/HGeometry/Box/Intersection.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ type instance Intersection (Box point) (Box point) =
-- | Box_x_Box_Box (Box point)

instance (Ord r, Num r, Point_ point d r
, HasComponents (Vector d (IntersectionOf (ClosedInterval r) (ClosedInterval r)))
, HasComponents (Vector d (Interval_x_IntervalIntersection r (ClosedInterval r)))
(Vector d (ClosedInterval r))
, HasComponents (Vector d (ClosedInterval r)) (Vector d r)
, Has_ Vector_ d (ClosedInterval r)
Expand All @@ -48,7 +48,7 @@ instance (Ord r, Num r, Point_ point d r
a `intersects` b = isJust $ a `intersect` b

instance ( Point_ point d r, Ord r, Num r
, HasComponents (Vector d (IntersectionOf (ClosedInterval r) (ClosedInterval r)))
, HasComponents (Vector d (Interval_x_IntervalIntersection r (ClosedInterval r)))
(Vector d (ClosedInterval r))
, HasComponents (Vector d (ClosedInterval r)) (Vector d r)
, Has_ Vector_ d (ClosedInterval r)
Expand All @@ -59,7 +59,7 @@ instance ( Point_ point d r, Ord r, Num r
where
fromExtent' = fromExtent . over (components @_ @(Vector d (ClosedInterval r))) f
f = \case
ClosedInterval_x_ClosedInterval_Point x -> ClosedInterval x x
ClosedInterval_x_ClosedInterval_Contained i -> i
ClosedInterval_x_ClosedInterval_Partial i -> i
Interval_x_Interval_Point x -> ClosedInterval x x
Interval_x_Interval_Contained i -> i
Interval_x_Interval_Partial i -> i
{-# INLINE intersect #-}
4 changes: 2 additions & 2 deletions hgeometry/kernel/src/HGeometry/Interval.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ module HGeometry.Interval
, ClosedInterval, OpenInterval
, HalfOpenInterval(HalfOpenInterval)
, module HGeometry.Interval.Class
, IntersectionOf(..)
, asClosedInterval, asOpenInterval, asAnInterval
, Interval_x_IntervalIntersection(..)
) where

import HGeometry.Intersection
-- import HGeometry.Intersection
import HGeometry.Interval.Class
import HGeometry.Interval.EndPoint ()
import HGeometry.Interval.Internal
Expand Down
Loading

0 comments on commit 5b7e45b

Please sign in to comment.