# gen_circle_sector (Operator)

## Name

`gen_circle_sector` — Create a circle sector.

## Signature

`gen_circle_sector( : CircleSector : Row, Column, Radius, StartAngle, EndAngle : )`

## Description

The operator `gen_circle_sector` generates one or more circles sectors described by the center, `Radius`, `StartAngle` and `EndAngle`. If several circle sectors shall be generated the coordinates must be passed in the form of tuples.

`gen_circle_sector` only creates symmetric circle sectors with respect to the center of coordinates. To achieve this, the radius is internally rounded down to a multiple of 0.5. If an integer number is specified for the radius (i.e., 1, 2, 3, ...) an even diameter is obtained, and hence the circle can only be symmetric with respect to a center with coordinates that have a fractional part of 0.5. Consequently, internally the coordinates of the center are adapted to the closest coordinates that have a fractional part of 0.5. Here, integer coordinates are rounded down to the next smaller values with a fractional part of 0.5. For odd diameters (i.e., radius = 1.5, 2.5, 3.5, ...), the circle can only be symmetric with respect to a center with integer coordinates. Hence, internally the coordinates of the center are rounded to the nearest integer coordinates. It should be noted that the above algorithm may lead to the fact that circles with an even diameter are not contained in circles with the next larger odd diameter, even if the coordinates specified in `Row` and `Column` are identical. The angles are given in radians in mathematically positive direction. See the examples illustrated in the figure below. Note, 'rad(360)' is equivalent to 0. As a consequence a sector with `StartAngle` = 0 and `EndAngle` = 'rad(360)' results in an empty region.

Illustration of different possible angle combinations.

If the circle extends beyond the image edge it is clipped to the current image format if the value of the system flag 'clip_region' is set to 'true' (`set_system`).

## Execution Information

• Multithreading type: reentrant (runs in parallel with non-exclusive operators).
• Processed without parallelization.

## Parameters

`CircleSector` (output_object)  region(-array) `→` object

Generated circle sector.

`Row` (input_control)  coordinates.y(-array) `→` (real / integer)

Line index of center.

Default value: 200.0

Suggested values: 0.0, 10.0, 50.0, 100.0, 200.0, 300.0

Typical range of values: ```1.0 ≤ Row ≤ 1024.0``` (lin)

Minimum increment: 1.0

Recommended increment: 10.0

`Column` (input_control)  coordinates.x(-array) `→` (real / integer)

Column index of center.

Default value: 200.0

Suggested values: 0.0, 10.0, 50.0, 100.0, 200.0, 300.0

Typical range of values: ```1.0 ≤ Column ≤ 1024.0``` (lin)

Minimum increment: 1.0

Recommended increment: 10.0

`Radius` (input_control)  number(-array) `→` (real / integer)

Default value: 100.5

Suggested values: 1.0, 1.5, 2.0, 2.5, 3, 3.5, 4, 4.5, 5.5, 6.5, 7.5, 9.5, 11.5, 15.5, 20.5, 25.5, 31.5, 50.5

Typical range of values: ```1.0 ≤ Radius ≤ 1024.0``` (lin)

Minimum increment: 1.0

Recommended increment: 10.0

Restriction: `Radius > 0.0`

`StartAngle` (input_control)  angle.rad(-array) `→` (real / integer)

Start angle of the circle sector.

Default value: 0.0

Suggested values: 0.0, 0.785398, 1.5708, 2.35619, 3.14159, 3.92699, 4.71239, 5.49779, 6.28318

Typical range of values: ```0 ≤ StartAngle ≤ 6.28318``` (lin)

Restriction: `0 <= StartAngle && StartAngle <= 2 * pi`

`EndAngle` (input_control)  angle.rad(-array) `→` (real / integer)

End angle of the circle sector.

Default value: 3.14159

Suggested values: 0.0, 0.785398, 1.5708, 2.35619, 3.14159, 3.92699, 4.71239, 5.49779, 6.28318

Typical range of values: ```0 ≤ EndAngle ≤ 6.28318``` (lin)

Restriction: `0 <= EndAngle && EndAngle <= 2 * pi`

## Example (HDevelop)

```read_image(Image,'fabrik')
dev_clear_window ()
```

## Complexity

Runtime complexity: O(`Radius` * 2)

Storage complexity (byte): O(`Radius` * 8)

## Result

If the parameter values are correct, the operator `gen_circle_sector` returns the value TRUE. Otherwise an exception is raised. The clipping according to the current image format is set via the operator `set_system('clip_region',<'2 (H_MSG_TRUE)'/'3 (H_MSG_FALSE)'>)`. If an empty region is created by clipping (the circle is completely outside of the image format) the operator `set_system('store_empty_region',<'2 (H_MSG_TRUE)'/'3 (H_MSG_FALSE)'>)` determines whether the empty region is put out.

## Possible Successors

`paint_region`, `reduce_domain`

## Alternatives

`gen_ellipse`, `gen_ellipse_sector`, `gen_region_polygon_filled`, `gen_region_points`, `gen_region_runs`, `draw_circle`

`disp_circle`, `disp_region`, `set_shape`, `smallest_circle`, `reduce_domain`