1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import 'dart:math' as math;
- import 'package:fis_measure/interfaces/date_types/point.dart';
- import 'package:fis_measure/interfaces/date_types/skew_transform.dart';
- import 'package:fis_measure/interfaces/process/physical_coordinates/physical_coordinate.dart';
- import 'package:flutter/foundation.dart';
- import 'package:vid/us/vid_us_visual_area_type.dart';
- class ConvexTissuePhysicalCoordinate implements ITissuePhysicalCoordinate {
- late final double _depthStart;
- late final double _depthEnd;
- late final double _width;
- late final double _beamPosition;
- late final double _zeroRadius;
- ConvexTissuePhysicalCoordinate(
- double depthStart,
- double depthEnd,
- double width,
- double beamPosition,
- double zeroRadius,
- ) {
- _depthStart = depthStart;
- _depthEnd = depthEnd;
- _width = width;
- _beamPosition = beamPosition;
- _zeroRadius = zeroRadius;
- }
- @override
- VidUsVisualAreaType get areaType => VidUsVisualAreaType.Tissue;
- @override
- double get depthEnd => _depthEnd;
- @override
- double get depthStart => _depthStart;
- @override
- double get width => _width;
- @override
- double get beamPosition => _beamPosition;
- /// 可见扇形边到圆点的距离
- double get zeroRadius => _zeroRadius;
- @override
- DPoint convert(DPoint pointInLogical) {
- double depth = math.sqrt(math.pow(pointInLogical.x, 2) +
- math.pow(pointInLogical.y + zeroRadius, 2)) -
- zeroRadius;
- double tilt =
- toDegrees(math.atan2(pointInLogical.x, pointInLogical.y + zeroRadius));
- return DPoint(tilt, depth);
- }
- @override
- DPoint convertBack(DPoint pointInPhysical) {
- int ratio = pointInPhysical.x >= 0 ? 1 : -1;
- var angle = pointInPhysical.x.abs();
- double radian = (math.pi / 180) * angle.abs();
- double x = ratio * math.sin(radian) * (pointInPhysical.y + zeroRadius);
- double y = math.cos(radian) * (pointInPhysical.y + zeroRadius) - zeroRadius;
- return DPoint(x, y);
- }
- @protected
- double toDegrees(double angle) {
- return angle / math.pi * 180;
- }
- }
|