12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import 'dart:math' as math;
- import 'package:fis_measure/interfaces/date_types/matrix.dart';
- import 'package:fis_measure/interfaces/date_types/point.dart';
- import 'package:fis_measure/interfaces/date_types/vector.dart';
- class EllipseTest {
- static void calculateYAxisPoints(
- DPoint yAxisStart,
- DPoint yAxisEnd,
- DPoint xAxisStart,
- DPoint xAxisEnd,
- DPoint adjustYAxisPoint,
- bool keepYAxisLength,
- ) {
- var reverseMatrix = DMatrix();
- var vertical = DVector(1, 0);
- var angleAngleBetweenVertical =
- calculateAngel(xAxisEnd, xAxisStart, vertical);
- var centroidX = (xAxisStart.x + xAxisEnd.x) * 0.5;
- var centroidY = (xAxisStart.y + xAxisEnd.y) * 0.5;
- var centroid = DPoint(centroidX, centroidY);
- reverseMatrix.rotateAt(angleAngleBetweenVertical, centroid.x, centroid.y);
- var convertMatrix = reverseMatrix;
- convertMatrix.invert();
- double length;
- if (adjustYAxisPoint == xAxisEnd) {
- if (keepYAxisLength) {
- length = (yAxisStart - yAxisEnd).length / 2;
- } else {
- length = (xAxisEnd - xAxisStart).length / 2;
- }
- } else {
- length = distance(xAxisStart, xAxisEnd, adjustYAxisPoint);
- }
- var pt3 = DPoint(centroid.x, centroid.y + length);
- var pt4 = DPoint(centroid.x, centroid.y - length);
- var yAxisStartTrans = convertMatrix.transformWidthPoint(pt3);
- var yAxisEndTrans = convertMatrix.transformWidthPoint(pt4);
- yAxisStart.update(yAxisStartTrans);
- yAxisStart.update(yAxisEndTrans);
- }
- static double calculateAngel(DPoint pt1, DPoint pt2, DVector axis) {
- DVector xAxis = pt2 - pt1;
- var angle = DVector.angleBetween(xAxis, axis);
- return angle;
- }
- static double distance(DPoint pt1, DPoint pt2, DPoint pt) {
- double dis = 0;
- if (pt1.x == pt2.x) {
- dis = (pt.x - pt1.x).abs();
- return dis;
- }
- var lineK = (pt2.y - pt1.y) / (pt2.x - pt1.x);
- var lineC = (pt2.x * pt1.y - pt1.x * pt2.y) / (pt2.x - pt1.x);
- dis = (lineK * pt.x - pt.y + lineC).abs() / (math.sqrt(lineK * lineK + 1));
- return dis;
- }
- }
|