# Points and Rectangles

SenseTalk understands the concepts of geometric points and rectangles.

## Points and Rectangles in SenseTalk

Any list of two numbers, or a text string consisting of two numbers separated by a comma, can be treated as a point. The first number represents the X coordinate of the point, and the second number the Y coordinate:

`put [150,47] into pointA`

put "250,98" into pointB

A rectangle can be represented by any list of two points, by a list of four numbers or by a text string consisting of four numbers separated by commas (representing two points). The two points indicate two opposite corners of the rectangle (either the top-left and bottom-right corners, or the bottom-left and top-right corners, listed in either order).

`put [pointA,pointB] into myRect`

put "15,28,19,72" into bounds

The `Is Within`

operator can be used to test whether a point lies within a rectangle or one rectangle is completely within another:

`if [18,35] is within bounds then scoreHit`

`X`

, `Y`

, `Width`

, `Height`

, `Origin`

, and `Size`

Functions

**Behavior:** These functions can be used to extract the various component values of a point or rectangle. The functions `x`

and `y`

can be used with points and rectangles to obtain the x and y coordinates of the point, or of the origin point of the rectangle. The `origin`

and `size`

functions can be used with rectangles to obtain the origin point (the minimum x and y values) and the size (a list of two numbers representing the width and height, respectively) of the rectangle. The `width`

and `height`

functions can be used with rectangles or sizes to obtain the width or height.

{the} x of pointOrRectangle | x( pointOrRectangle ) |

{the} y of pointOrRectangle | y( pointOrRectangle ) |

{the} width of rectangle | width( rectangle ) |

{the} height of rectangle | height( rectangle ) |

{the} origin of rectangle | origin( rectangle ) |

{the} size of rectangle | size( rectangle ) |

**Examples:**

These functions are most commonly used with the dot (`.`

), apostrophe-S (`‘s`

) or `of`

syntax, similar to accessing a property of an object, but keep in mind that these are not properties, but functions which return read-only values:

`put pointA.x into horizontalLocation`

put the y of pointA into verticalLocation

put myRect's origin into topLeftCorner

put the size of bounds into outerRect

put height of imageRect into verticalSpaceNeeded

`Top`

, `Bottom`

, `Left`

, `Right`

, `TopLeft`

, `TopRight`

, `BottomLeft`

, `BottomRight`

, `Center`

, `TopCenter`

, `BottomCenter`

, `LeftCenter`

, and `RightCenter`

Functions

**Behavior:** These functions can be used to find the coordinates of various parts of a rectangle.

The `top`

, `bottom`

, `left`

and `right`

functions return a single number which is the y coordinate of the top or bottom edge, or the x coordinate of the left or right edge, respectively, of a rectangle.

The `topLeft`

, `topRight`

, `bottomLeft`

and `bottomRight`

functions return the coordinates of the point at the indicated corner of a rectangle.

The `center`

function returns the coordinates of the center of a rectangle, and the `topCenter`

, `bottomCenter`

, `leftCenter`

and `rightCenter`

functions return the coordinates of the point at the center of the indicated edge of a rectangle.

{the} top of rectangle | top( rectangle ) |

{the} bottom of rectangle | bottom( rectangle ) |

{the} left of rectangle | left( rectangle ) |

{the} right of rectangle | right( rectangle ) |

{the} topLeft of rectangle | topLeft( rectangle ) |

{the} topRight of rectangle | topRight( rectangle ) |

{the} bottomLeft of rectangle | bottomLeft( rectangle ) |

{the} bottomRight of rectangle | bottomRight( rectangle ) |

{the} center of rectangle | center( rectangle ) |

{the} topCenter of rectangle | topCenter( rectangle ) |

{the} bottomCenter of rectangle | bottomCenter( rectangle ) |

{the} leftCenter of rectangle | leftCenter( rectangle ) |

{the} rightCenter of rectangle | rightCenter( rectangle ) |

**Examples:**

These functions are most commonly used with the dot (`.`

), apostrophe-S (`‘s`

) or `of`

syntax, similar to accessing a property of an object, but keep in mind that these are not properties, but functions which return read-only values:

`put boundingBox.top into highestEdge`

put the bottomRight of doorFrame into anchorPoint

put myRect's center into centerPoint

put the leftCenter of bounds into alignmentPoint

`Distance`

Function

**Behavior:** The Distance function returns the distance between two points. Both 2-D and 3-D points are supported.

Syntax:

{the}distance betweenpoint1andpoint2

{the}distance frompoint1topoint2

distance(point1,point2)

**Examples:**

`put the distance from [100,100] to [130,140] --> 50`

set myRect to [0,0,24,10]

put the distance between myRect.topLeft and myRect.center --> 13

put distance(startPoint, endPoint) into distanceTraveled

put distance from [12,14,50] to [48,17,22] --> 45.70558