123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // ignore_for_file: constant_identifier_names
- import 'dart:math' as math;
- import 'package:fis_measure/interfaces/date_types/point.dart';
- class GeneralFormulas {
- /// Volume:1/6 x π
- static const double VolumeCofficient = math.pi / 6.0;
- /// 1/6 x π x D1^2 x D2 (D1 > D2)
- ///
- /// 1/6 x π x D1 x D2^2 (D1 ≤ D2)
- ///
- /// return unit: cm³</returns>
- static double volumeTwoLine(double d1, double d2, [bool useBigValue = true]) {
- double volume = 0;
- if (!doubleAlmostEquals(d1, 0) && !doubleAlmostEquals(d2, 0)) {
- if (useBigValue) {
- if (d1 > d2) {
- volume = d1 * d1 * d2 * math.pi / 6.0;
- } else {
- volume = d1 * d2 * d2 * math.pi / 6.0;
- }
- } else {
- if (d1 > d2) {
- volume = d2 * d2 * d1 * math.pi / 6.0;
- } else {
- volume = d1 * d1 * d2 * math.pi / 6.0;
- }
- }
- }
- return volume;
- }
- /// 带比率系数算体积
- ///
- /// [coefficient] 比率系数
- static double volumeWithCoefficient(
- double d1,
- double d2,
- double d3,
- double coefficient,
- ) {
- double volume = 0;
- if (!doubleAlmostEquals(d1, 0) &&
- !doubleAlmostEquals(d2, 0) &&
- !doubleAlmostEquals(d3, 0)) {
- volume = d1 * d2 * d3 * coefficient;
- }
- return volume;
- }
- /// 狭窄率计算
- static double countStenosis(double d1, double d2) {
- double residual;
- double lumen;
- if (d1 > d2) {
- residual = d2;
- lumen = d1;
- } else {
- residual = d1;
- lumen = d2;
- }
- return (1.0 - residual / lumen) * 100;
- }
- static bool doubleAlmostEquals(double num1, double num2,
- [double precision = 0.000001]) {
- if (num1.isNaN && num2.isNaN) return true;
- return (num1 - num2).abs() <= precision;
- }
- /// 点到线的距离
- ///
- /// [pt1] 线端点1
- ///
- /// [pt2] 线端点2
- ///
- /// [pt] 点
- static double distance2Line(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;
- }
- ///计算斜率
- static double countSlope(DPoint p1, DPoint p2) {
- if (doubleAlmostEquals(p2.x, p1.x)) return 0;
- double vertical = p2.y - p1.y;
- double time = (p2.x - p1.x).abs();
- double slope = vertical / time;
- return slope;
- }
- }
|