Files
kanimaji-dart/lib/common/point.dart
2022-02-01 23:46:37 +01:00

49 lines
1.4 KiB
Dart

import 'dart:math' as math;
class Point {
final num x;
final num y;
const Point(this.x, this.y);
const Point.from({this.x = 0, this.y = 0});
static const zero = Point(0, 0);
operator +(covariant Point p) => Point(x + p.x, y + p.y);
operator -(covariant Point p) => Point(x - p.x, y - p.y);
operator *(covariant Point p) => Point(x * p.x, y * p.y);
operator /(covariant Point p) => Point(x / p.x, y / p.y);
@override
bool operator ==(Object other) =>
other is Point && x == other.x && y == other.y;
@override
int get hashCode => x.hashCode ^ y.hashCode;
Point addX(num n) => Point(x + n, y);
Point addY(num n) => Point(x, y + n);
Point add(num n) => Point(x + n, y + n);
Point subtractX(num n) => Point(x - n, y);
Point subtractY(num n) => Point(x, y - n);
Point subtractXY(num n) => Point(x - n, y - n);
Point xSubtract(num n) => Point(n - x, y);
Point ySubtract(num n) => Point(x, n - y);
Point xySubtract(num n) => Point(n - x, n - y);
Point timesX(num n) => Point(x * n, y);
Point timesY(num n) => Point(x, y * n);
Point times(num n) => Point(x * n, y * n);
Point dividesX(num n) => Point(x / n, y);
Point dividesY(num n) => Point(x, y / n);
Point divides(num n) => Point(x / n, y / n);
Point pow(int n) => Point(math.pow(x, n), math.pow(y, n));
double abs() => math.sqrt(x * x + y * y);
@override
String toString() => '($x,$y)';
}