Search packages, repositories and app categories

Package detailsv0.2.0

superdeclarative_geometry

First-class support for angles, polar coordinates, and more.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
27
Likes
32
Pub points
150

Install package

flutter pub add superdeclarative_geometry

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

superdeclarative_geometry is a Dart package offering first-class support for angles, polar coordinates, and geometric calculations. Designed for precision and ease of use, it provides intuitive APIs to work with rotational math, vector transformations, and coordinate system conversions. Ideal for applications requiring advanced geometry handling, such as animations, game development, or data visualization. The package is cross-platform, supporting Android, iOS, Web, macOS, Windows, and Linux, making it versatile for Flutter projects across devices.

Use cases

  • 2D/3D graphics rendering
  • Interactive UI animations
  • Game development mechanics
  • Data visualization with radial layouts
  • Coordinate system conversions
  • Rotational physics simulations

Key features

  • Native angle and polar coordinate types
  • Efficient geometric transformations
  • Cross-platform compatibility
  • Clean, readable API design
  • Support for radians and degrees
  • Built-in conversion utilities

Suitable for

  • Flutter developers working with geometry
  • UI/UX designers needing precise rotations
  • Game developers requiring vector math
  • Visualization tool creators
  • Educational apps involving math concepts

Considerations

  • Requires understanding of polar and angular math
  • May add overhead for simple linear layouts
  • Best suited for projects with geometric complexity
  • Not optimized for high-frequency real-time calculations
  • Limited documentation beyond basic examples

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

SuperDeclarative Geometry

First-class support for angles, polar coordinates, and related math.


If you get value from this package, please consider supporting SuperDeclarative!


Get Started

pub

dependencies:
  superdeclarative_geometry: ^[VERSION]

Quick Reference

Angles

Create an Angle from degrees or radians:

final degreesToRadians = Angle.fromDegrees(45);
final radiansToDegrees = Angle.fromRadians(pi / 4);

Retrieve Angle values as degrees or radians:

myAngle.degrees;
myAngle.radians;

Determine an Angle's direction and force it to be positive or negative:

myAngle.isPositive;
myAngle.isNegative;

myAngle.makePositive(); // Ex: -270° ->  90°
myAngle.makeNegative(); // Ex:  270° -> -90°

Determine the category of an Angle:

myAngle.isAcute;
myAngle.isObtuse;
myAngle.isReflexive;
myAngle.category;

Determine if two Angles are equivalent, regardless of direction:

Angle.fromDegrees(90).isEquivalentTo(Angle.fromDegrees(-270));

Invert, add, subtract, multiply, and divide Angles:

-Angle.fromDegrees(30);

Angle.fromDegrees(30) + Angle.fromDegrees(15);

Angle.fromDegrees(30) - Angle.fromDegrees(15);

Angles.fromDegrees(45) * 2;

Angles.fromDegrees(90) / 2;

Rotate an Angle:

final Rotation rotation = myAngle.rotate(Angle.fromDegrees(150));

Rotations

Angles are confined to values in (-360°, 360°). For values beyond this range, the concept of a Rotation is provided.

A Rotation is almost identical to an Angle except that a Rotation can be arbitrarily large in the positive or negative direction. This allows for the accumulation of turns over time.

Create a Rotation:

final rotation = Rotation.fromDegrees(540);

Add, subtract, multiply, and divide Rotations just like Angles.

Reduce a Rotation to an Angle:

Rotation.fromDegrees(540).reduceToAngle();

Polar Coordinates

Define polar coordinates by a radius and an angle, or by a Cartesian point:

PolarCoord(100, PolarCoord.fromDegrees(45));

CartesianPolarCoords.fromPoint(Point(0, 100));

Add, subtract, multiply, and divide PolarCoords:

PolarCoord(100, Angle.fromDegrees(45)) + PolarCoord(200, Angle.fromDegrees(135));

PolarCoord(100, Angle.fromDegrees(45)) - PolarCoord(200, Angle.fromDegrees(135));

PolarCoord(100, Angle.fromDegrees(15)) * 2;

PolarCoord(200, Angle.fromDegrees(30)) / 2;

Map a PolarCoord to a Cartesian Point:

// Map to Cartesian coordinates.
final Point point = PolarCoord(100, Angle.fromDegrees(45)).toCartesian();

Cartesian Orientations

Different use-cases treat angles in different ways.

Mathematics treats the positive x-axis as a 0° angle and treats positive angles as running counter-clockwise.

Flutter app screens treat the positive x-axis as a 0° angle, but then treats positive angles as running clockwise.

Ship navigation treats the positive y-axis as a 0° angle and then treats positive angles as running clockwise.

Each of these situations apply a different orientation when mapping an angle, or a polar coordinate, to a location in Cartesian space. This concept of orientation is supported by superdeclarative_geometry by way of CartesianOrientations.

Both Angle and PolarCoord support CartesianOrientation mappings.

final polarCoord = PolarCoord(100, Angle.fromDegrees(30));

// Treat angles like a Flutter screen.
// This point is 30° clockwise from the x-axis.
final screenPoint = polarCoord.toCartesian(); // defaults to "screen" orientation

// Treat angles like mathematics.
// This point is 30° counter-clockwise from the x-axis.
final mathPoint = polarCoord.toCartesian(orientation: CartesianOrientation.math);

// Treat angles like navigators.
// This point is 30° clockwise from the y-axis.
final navigationPoint = polarCoord.toCartesian(orientation: CartesianOrientation.navigation);

You can define a custom CartesianOrientation by implementing the interface. Then, you can pass an instance of your custom orientation into PolarCoord's toCartesian() method.

Categories

Source repository

Projects using this package

No data available yet.