Ever and always relationships
eContains({geometry,trgeometry},{geometry,trgeometry}) → boolean
aContains({geometry,trgeometry},{geometry,trgeometry}) → boolean
eCovers({geometry,trgeometry},{geometry,trgeometry}) → boolean
aCovers({geometry,trgeometry},{geometry,trgeometry}) → boolean
eDisjoint({geometry,trgeometry},{geometry,trgeometry}) → boolean
aDisjoint({geometry,trgeometry},{geometry,trgeometry}) → boolean
eDwithin({geometry,trgeometry},{geometry,trgeometry},float) → boolean
aDwithin({geometry,trgeometry},{geometry,trgeometry},float) → boolean
eIntersects({geometry,trgeometry},{geometry,trgeometry}) → boolean
aIntersects({geometry,trgeometry},{geometry,trgeometry}) → boolean
eTouches({geometry,trgeometry},{geometry,trgeometry}) → boolean
aTouches({geometry,trgeometry},{geometry,trgeometry}) → boolean
The ever relationships determine whether the relationship holds at some instant, and the always ones whether it holds at every instant. A temporal rigid geometry answers them at the body its reference geometry places at each instant, so the relationship read is the one of the placed body rather than of the reference geometry at the origin. With linear interpolation the body moves between its instants, and eIntersects, aIntersects, eDisjoint and aDisjoint read that motion through the temporal distance, so they need what the distance needs: a convex body in two dimensions, against a geometry whose polygons are convex and without holes. The other relationships do not yet read the motion between the instants. These relationships do not yet follow the section called “Operands of Different Dimensions”: an operand of another dimension gives an error. For a value in three dimensions, eIntersects, eDisjoint, aDisjoint, eContains, eCovers and eTouches do not yet read Z, so a geometry above the body can answer as if it met the body, and aContains and aCovers do not yet support a geometry with Z in every form.
SELECT eIntersects(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(3 3),0)@2001-01-03]', geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))'); -- true SELECT aIntersects(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(3 3),0)@2001-01-03]', geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))'); -- false
eDwithin and aDwithin use the temporal distance of the section called “Distance Operations”, with the same requirements on the geometries. In the example, a square turns next to a point. It is at distance 2 from the point at the two instants, but it comes within 1.7 of the point between them.
SELECT eDwithin(trgeometry 'Polygon((-1 -1,1 -1,1 1,-1 1,-1 -1)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(0 0),1.5707963267948966)@2001-01-02]', geometry 'Point(3 0)', 1.7); -- true SELECT aDwithin(trgeometry 'Polygon((-1 -1,1 -1,1 1,-1 1,-1 -1)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(0 0),1.5707963267948966)@2001-01-02]', geometry 'Point(3 0)', 1.7); -- false