10class GeometryUtilsExample {
11 GeometryUtilsExample() {
12 _demonstrateGeometryUtilsMethods();
18 void _demonstrateGeometryUtilsMethods() {
19 print(
"=== GeometryUtils Methods ===");
21 _demonstratePointOperations();
22 _demonstrateGlobalPointOperations();
23 _demonstrateBoundingBoxOperations();
24 _demonstrateSegmentOperations();
25 _demonstratePolygonOperations();
26 _demonstrateLineOperations();
27 _demonstrateAdvancedGeometryOperations();
33 void _demonstratePointOperations() {
34 print(
"--- Point Operations ---");
41 print(
"Created points: P1(${point1.x}, ${point1.y}), P2(${point2.x}, ${point2.y}), P3(${point3.x}, ${point3.y})");
47 print(
"Point1 X coordinate: $x1");
53 print(
"Point1 Y coordinate: $y1");
59 print(
"Distance between P1 and P2: ${distance.toStringAsFixed(2)} meters");
63 List<Point> testPoints = [
71 print(
"Test points created for further calculations");
77 void _demonstrateBoundingBoxOperations() {
78 print(
"--- BoundingBox Operations ---");
85 print(
"Created bounding box: bottomLeft(${boundingBox.bottomLeft.x}, ${boundingBox.bottomLeft.y}), topRight(${boundingBox.topRight.x}, ${boundingBox.topRight.y})");
90 print(
"Bottom-left corner: (${leftCorner.x}, ${leftCorner.y})");
95 print(
"Top-right corner: (${rightCorner.x}, ${rightCorner.y})");
102 void _demonstrateGlobalPointOperations() {
103 print(
"--- GlobalPoint Operations ---");
110 print(
"Created global points: GP1(${globalPoint1.latitude}, ${globalPoint1.longitude}), GP2(${globalPoint2.latitude}, ${globalPoint2.longitude})");
115 double lat1 = globalPoint1.
latitude;
116 print(
"GlobalPoint1 latitude: $lat1");
122 print(
"GlobalPoint1 longitude: $lon1");
128 print(
"Distance between Moscow and St. Petersburg: ${globalDistance.toStringAsFixed(2)} meters");
133 print(
"Distance between Moscow points: ${nearbyDistance.toStringAsFixed(2)} meters");
139 void _demonstrateSegmentOperations() {
140 print(
"--- Segment Operations ---");
153 print(
"Created segments: S1((${segment1.start.x}, ${segment1.start.y}) -> (${segment1.end.x}, ${segment1.end.y})), S2((${segment2.start.x}, ${segment2.start.y}) -> (${segment2.end.x}, ${segment2.end.y}))");
159 print(
"Segment1 start point: (${segment1Start.x}, ${segment1Start.y})");
165 print(
"Segment1 end point: (${segment1End.x}, ${segment1End.y})");
172 print(
"Segment1 length: ${length1.toStringAsFixed(2)} meters");
173 print(
"Segment2 length: ${length2.toStringAsFixed(2)} meters");
179 print(
"Distance from segment1 to test point: ${distanceToPoint.toStringAsFixed(2)} meters");
185 print(
"Segments intersect: $intersects");
191 print(
"Intersection point: (${intersection.x.toStringAsFixed(2)}, ${intersection.y.toStringAsFixed(2)})");
197 print(
"Division ratio: ${divisionRatio.toStringAsFixed(2)}");
204 print(
"Point at ratio $ratio: (${ratioPoint.x.toStringAsFixed(2)}, ${ratioPoint.y.toStringAsFixed(2)})");
210 print(
"Projection ratio: ${projectionRatio.toStringAsFixed(2)}");
217 void _demonstratePolygonOperations() {
218 print(
"--- Polygon Operations ---");
221 List<Point> polygonPoints = [
231 print(
"Created polygon with ${polygon.points.length} points");
236 List<Point> points = polygon.
points;
237 print(
"Polygon points: ${points.map((p) => "(${p.x}, ${p.y})
").join(",
")}");
243 print(
"Polygon area: ${area.toStringAsFixed(2)} square meters");
249 print(
"Polygon center: (${center.x.toStringAsFixed(2)}, ${center.y.toStringAsFixed(2)})");
260 print(
"Polygon contains inside point: $containsInside");
261 print(
"Polygon contains outside point: $containsOutside");
265 List<Point> complexPolygonPoints = [
277 print(
"Complex polygon area: ${complexArea.toStringAsFixed(2)} square meters");
278 print(
"Complex polygon center: (${complexCenter.x.toStringAsFixed(2)}, ${complexCenter.y.toStringAsFixed(2)})");
284 void _demonstrateLineOperations() {
285 print(
"--- Line Operations ---");
288 List<Segment> lineSegments = [
297 print(
"Created line with ${line.segments.length} segments");
302 List<Segment> segments = line.
segments;
303 print(
"Line segments: ${segments.length} segments");
307 double totalLength = 0.0;
308 for (
Segment segment in segments) {
311 print(
"Total line length: ${totalLength.toStringAsFixed(2)} meters");
314 List<Segment> complexLineSegments = [
320 Line complexLine =
Line(complexLineSegments);
322 double complexTotalLength = 0.0;
326 print(
"Complex line total length: ${complexTotalLength.toStringAsFixed(2)} meters");
332 void _demonstrateAdvancedGeometryOperations() {
333 print(
"--- Advanced Geometry Operations ---");
336 _demonstrateDistanceCalculations();
339 _demonstrateIntersectionScenarios();
342 _demonstratePolygonScenarios();
345 _demonstrateProjectionCalculations();
351 void _demonstrateDistanceCalculations() {
352 print(
"--- Distance Calculations ---");
356 List<Point> testPoints = [
362 for (
Point testPoint in testPoints) {
364 print(
"Distance from origin to (${testPoint.x}, ${testPoint.y}): ${distance.toStringAsFixed(2)} meters");
375 print(
"Moscow to London: ${(moscowLondon / 1000).toStringAsFixed(2)} km");
376 print(
"Moscow to Tokyo: ${(moscowTokyo / 1000).toStringAsFixed(2)} km");
382 void _demonstrateIntersectionScenarios() {
383 print(
"--- Intersection Scenarios ---");
390 print(
"Parallel segments intersect: $parallelIntersects");
397 print(
"Perpendicular segments intersect: $perpendicularIntersects");
399 if (perpendicularIntersects) {
401 print(
"Intersection point: (${intersection.x.toStringAsFixed(2)}, ${intersection.y.toStringAsFixed(2)})");
409 print(
"Overlapping segments intersect: $overlapIntersects");
415 void _demonstratePolygonScenarios() {
416 print(
"--- Polygon Scenarios ---");
419 List<Point> square = [
430 print(
"Square area: ${squareArea.toStringAsFixed(2)} square meters");
431 print(
"Square center: (${squareCenter.x.toStringAsFixed(2)}, ${squareCenter.y.toStringAsFixed(2)})");
434 List<Point> triangle = [
444 print(
"Triangle area: ${triangleArea.toStringAsFixed(2)} square meters");
445 print(
"Triangle center: (${triangleCenter.x.toStringAsFixed(2)}, ${triangleCenter.y.toStringAsFixed(2)})");
454 print(
"Square contains (5,5): $containsInside");
455 print(
"Square contains (15,15): $containsOutside");
461 void _demonstrateProjectionCalculations() {
462 print(
"--- Projection Calculations ---");
467 List<double> ratios = [0.0, 0.25, 0.5, 0.75, 1.0];
469 for (
double ratio in ratios) {
471 print(
"Ratio $ratio: (${ratioPoint.x.toStringAsFixed(2)}, ${ratioPoint.y.toStringAsFixed(2)})");
477 print(
"Projection ratio for point (5,5): ${projectionRatio.toStringAsFixed(2)}");
482 print(
"Distance from segment to point (5,0): ${distanceToOffPoint.toStringAsFixed(2)} meters");
488 Future<void> runExample() async {
489 print(
"=== GeometryUtils Example ===");
492 await Future.delayed(Duration(seconds: 1));
494 print(
"=== Example completed ===");