# 坐标变换 多个坐标系的转换问题

0

``` 1 namespace CoordinateClass
2 {
3     class PhysicalCoordinate
4     {
5         public double X;
6         public double Y;
7
8         public struct TransCoordinate
9         {
10             public double XGain_Print; //转换的线性关系 ，PrintCoordinate.X=this.X*XGain_Print+XOffset_Print; 转换为打印的坐标
11             public double XOffset_Print;
12
13             public double YGain_Print;
14             public double YOffset_Print;
15
16             public double XGain_Image;//转换图像坐标的增益零点
17             public double XOffset_Inage;
18
19             public double YGain_Image;
20             public double YOffset_Image;
21
22             public double XGain_CCDCenter;//转换为CCD中心坐标的增益零点
23             public double XOffset_CCDCenter;
24
25             public double YGain_CCDCenter;
26             public double YOffset_CCDCenter;
27         }
28         public static TransCoordinate transCooridnate;
29         public PhysicalCoordinate(PhysicalCoordinate coordinate)
30         {
31             this.X = coordinate.X;
32             this.Y = coordinate.Y;
33         }
34        public PhysicalCoordinate(double x, double y)
35         {
36             this.X = x;
37             this.Y = y;
38         }
39        public PhysicalCoordinate()
40         {
41             this.X = 0;
42             this.Y = 0;
43         }
44         public PrintCoordinate ToPrintCoordinate() ///当前点转换为打印坐标系中的点
45         {
46             double tempX = X * transCooridnate.XGain_Print + transCooridnate.XOffset_Print;
47             double tempY = Y * transCooridnate.XGain_Print + transCooridnate.YOffset_Print;
48             PrintCoordinate PCooridnate = new PrintCoordinate(tempX, tempY);
49             return PCooridnate;
50         }
51
52         public ImageCoordinate ToImageCoordinate() //当前点转换为图像坐标系中对应的点
53         {
54             return new ImageCoordinate();
55         }
56
57         public CCDCenterCoordinate ToCCDCenterCoordinate()//转换为CCD坐标
58         {
59             return new CCDCenterCoordinate();
60         }
61
62         public static PhysicalCoordinate operator +(PhysicalCoordinate coordinate1, PhysicalCoordinate coordinate2)
63         {
64             return new PhysicalCoordinate(coordinate2.X + coordinate1.X, coordinate2.Y + coordinate1.Y);//操作符重载
65         }
66
67         public static PhysicalCoordinate operator -(PhysicalCoordinate coordinate1, PhysicalCoordinate coordinate2)
68         {
69             return new PhysicalCoordinate(coordinate1.X - coordinate2.X, coordinate1.Y - coordinate2.Y);//操作符重载
70         }
71
72         /// <summary>
73         /// 判断两个坐标是否相等
74         /// </summary>
75         /// <param name="coordinate1">第一个坐标</param>
76         /// <param name="coordinate2">第二个坐标</param>
77         /// <param name="reterminPointBit">保留的小数位</param>
78         /// <returns></returns>
79         public static bool Equale(PhysicalCoordinate coordinate1, PhysicalCoordinate coordinate2,int reterminPointBit=0)
80         {
81             return true;
82         }
83
84         public double GetDistanceBetweenPoint(PhysicalCoordinate coordinate)
85         {
86             return Math.Sqrt(Math.Pow(Math.Abs(this.X - coordinate.X), 2) + Math.Pow(Math.Abs(this.Y - coordinate.Y), 2));
87         }
88     }
89 }```

PhysicalCoordinate.ToImageCoordinate()//运动坐标系中的点转换为图像坐标系中的点

PhysicalCoordinate.ToPrintCoordinate()//运动坐标系中的点转换为打印坐标系中的点

ImageCoordinate.ToPrintCoordinate()//图像坐标系中的点转换为打印坐标系中的点

0

您需要登录以后才能回答，未注册用户请先注册