From 9585c74111260f988042a90e6ca326b27b62c4d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A2=9E=E8=BE=89?= <3045316072@qq.com> Date: Wed, 12 Feb 2025 09:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BB=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseTool/BaseConstVariable.h | 12 +- GF3_Simulation_GPSNode.xml | 1616 +++++++++++++++++ .../RasterProcessTool.vcxproj | 1 + .../RasterProcessTool.vcxproj.filters | 3 + LAMPSARProcessProgram/ToolBoxWidget.cpp | 4 +- .../RasterMainWidget/RasterMainWidget.cpp | 4 +- .../RasterMainWidget/RasterMainWidget.ui | 387 ++-- RasterMainWidgetGUI/resource/res.qrc | 14 + Toolbox/LAMPScatterTool/LAMPScatterTool.h | 3 + .../OribtModelOperator.cpp | 693 +++++++ .../OribtModelOperator.h | 101 ++ .../QSimulationSARPolynomialOrbitModel.cpp | 73 + .../QSimulationSARPolynomialOrbitModel.h | 27 + .../QSimulationSARPolynomialOrbitModel.ui | 120 ++ .../SimulationSARTool/SimulationSARTool.cpp | 26 +- Toolbox/SimulationSARTool/SimulationSARTool.h | 21 +- .../SimulationSARTool.vcxproj | 7 +- .../SimulationSARTool.vcxproj.filters | 18 + 18 files changed, 2941 insertions(+), 189 deletions(-) create mode 100644 GF3_Simulation_GPSNode.xml create mode 100644 RasterMainWidgetGUI/resource/res.qrc create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui diff --git a/BaseCommonLibrary/BaseTool/BaseConstVariable.h b/BaseCommonLibrary/BaseTool/BaseConstVariable.h index 0b9ca22..4af5368 100644 --- a/BaseCommonLibrary/BaseTool/BaseConstVariable.h +++ b/BaseCommonLibrary/BaseTool/BaseConstVariable.h @@ -141,12 +141,12 @@ struct DemBox { /*********************************************** FEKO仿真参数 ********************************************************************/ struct SatellitePos { double time; - double Px; - double Py; - double Pz; - double Vx; - double Vy; - double Vz; + double Px ; + double Py ; + double Pz ; + double Vx ; + double Vy ; + double Vz ; }; diff --git a/GF3_Simulation_GPSNode.xml b/GF3_Simulation_GPSNode.xml new file mode 100644 index 0000000..f3b6858 --- /dev/null +++ b/GF3_Simulation_GPSNode.xml @@ -0,0 +1,1616 @@ + + + + + 2023-06-19 10:08:35.999999 + -2167079.200000 + 5252078.800000 + 4301919.000000 + 3347.420000 + -3429.100000 + 5856.130000 + + + 2023-06-19 10:08:36.999999 + -2163730.900000 + 5248646.600000 + 4307772.800000 + 3349.290000 + -3435.330000 + 5851.380000 + + + 2023-06-19 10:08:38.000000 + -2160380.600000 + 5245208.100000 + 4313621.900000 + 3351.150000 + -3441.570000 + 5846.630000 + + + 2023-06-19 10:08:38.999999 + -2157028.600000 + 5241763.500000 + 4319466.100000 + 3353.010000 + -3447.800000 + 5841.860000 + + + 2023-06-19 10:08:40.000000 + -2153674.600000 + 5238312.500000 + 4325305.600000 + 3354.870000 + -3454.020000 + 5837.100000 + + + 2023-06-19 10:08:41.000000 + -2150318.800000 + 5234855.400000 + 4331140.400000 + 3356.720000 + -3460.240000 + 5832.320000 + + + 2023-06-19 10:08:42.000000 + -2146961.200000 + 5231392.000000 + 4336970.300000 + 3358.570000 + -3466.460000 + 5827.540000 + + + 2023-06-19 10:08:42.999999 + -2143601.700000 + 5227922.500000 + 4342795.500000 + 3360.410000 + -3472.680000 + 5822.760000 + + + 2023-06-19 10:08:44.000000 + -2140240.300000 + 5224446.700000 + 4348615.900000 + 3362.250000 + -3478.890000 + 5817.960000 + + + 2023-06-19 10:08:44.999999 + -2136877.200000 + 5220964.700000 + 4354431.500000 + 3364.080000 + -3485.100000 + 5813.160000 + + + 2023-06-19 10:08:45.999999 + -2133512.200000 + 5217476.500000 + 4360242.300000 + 3365.910000 + -3491.300000 + 5808.360000 + + + 2023-06-19 10:08:46.999999 + -2130145.400000 + 5213982.100000 + 4366048.300000 + 3367.730000 + -3497.500000 + 5803.550000 + + + 2023-06-19 10:08:47.999999 + -2126776.800000 + 5210481.500000 + 4371849.500000 + 3369.550000 + -3503.700000 + 5798.730000 + + + 2023-06-19 10:08:48.999999 + -2123406.300000 + 5206974.800000 + 4377645.900000 + 3371.370000 + -3509.900000 + 5793.900000 + + + 2023-06-19 10:08:49.999999 + -2120034.000000 + 5203461.800000 + 4383437.400000 + 3373.180000 + -3516.090000 + 5789.070000 + + + 2023-06-19 10:08:51.000000 + -2116660.000000 + 5199942.600000 + 4389224.100000 + 3374.980000 + -3522.270000 + 5784.230000 + + + 2023-06-19 10:08:51.999999 + -2113284.100000 + 5196417.300000 + 4395006.000000 + 3376.790000 + -3528.460000 + 5779.390000 + + + 2023-06-19 10:08:53.000000 + -2109906.400000 + 5192885.700000 + 4400783.000000 + 3378.580000 + -3534.640000 + 5774.540000 + + + 2023-06-19 10:08:54.000000 + -2106526.900000 + 5189348.000000 + 4406555.100000 + 3380.370000 + -3540.810000 + 5769.680000 + + + 2023-06-19 10:08:55.000000 + -2103145.600000 + 5185804.100000 + 4412322.300000 + 3382.160000 + -3546.980000 + 5764.820000 + + + 2023-06-19 10:08:56.000000 + -2099762.600000 + 5182254.000000 + 4418084.700000 + 3383.940000 + -3553.150000 + 5759.950000 + + + 2023-06-19 10:08:57.000000 + -2096377.700000 + 5178697.700000 + 4423842.200000 + 3385.720000 + -3559.320000 + 5755.070000 + + + 2023-06-19 10:08:58.000000 + -2092991.100000 + 5175135.300000 + 4429594.800000 + 3387.490000 + -3565.480000 + 5750.190000 + + + 2023-06-19 10:08:59.000000 + -2089602.700000 + 5171566.700000 + 4435342.600000 + 3389.260000 + -3571.640000 + 5745.300000 + + + 2023-06-19 10:09:00.000000 + -2086212.500000 + 5167992.000000 + 4441085.400000 + 3391.030000 + -3577.790000 + 5740.400000 + + + 2023-06-19 10:09:01.000000 + -2082820.600000 + 5164411.100000 + 4446823.400000 + 3392.790000 + -3583.940000 + 5735.500000 + + + 2023-06-19 10:09:01.999999 + -2079427.000000 + 5160824.100000 + 4452556.500000 + 3394.540000 + -3590.090000 + 5730.600000 + + + 2023-06-19 10:09:02.999999 + -2076031.600000 + 5157231.000000 + 4458284.700000 + 3396.290000 + -3596.230000 + 5725.680000 + + + 2023-06-19 10:09:03.999999 + -2072634.400000 + 5153631.700000 + 4464007.900000 + 3398.040000 + -3602.370000 + 5720.760000 + + + 2023-06-19 10:09:05.000000 + -2069235.500000 + 5150026.300000 + 4469726.300000 + 3399.780000 + -3608.510000 + 5715.830000 + + + 2023-06-19 10:09:05.999999 + -2065834.800000 + 5146414.700000 + 4475439.600000 + 3401.520000 + -3614.640000 + 5710.900000 + + + 2023-06-19 10:09:07.000000 + -2062432.400000 + 5142797.000000 + 4481148.100000 + 3403.250000 + -3620.770000 + 5705.960000 + + + 2023-06-19 10:09:07.999999 + -2059028.300000 + 5139173.200000 + 4486851.700000 + 3404.980000 + -3626.890000 + 5701.020000 + + + 2023-06-19 10:09:08.999999 + -2055622.500000 + 5135543.200000 + 4492550.300000 + 3406.700000 + -3633.010000 + 5696.070000 + + + 2023-06-19 10:09:09.999999 + -2052215.000000 + 5131907.200000 + 4498243.900000 + 3408.420000 + -3639.130000 + 5691.110000 + + + 2023-06-19 10:09:10.999999 + -2048805.700000 + 5128265.000000 + 4503932.600000 + 3410.130000 + -3645.240000 + 5686.140000 + + + 2023-06-19 10:09:11.999999 + -2045394.700000 + 5124616.700000 + 4509616.200000 + 3411.840000 + -3651.350000 + 5681.170000 + + + 2023-06-19 10:09:13.000000 + -2041982.000000 + 5120962.400000 + 4515295.000000 + 3413.540000 + -3657.460000 + 5676.200000 + + + 2023-06-19 10:09:13.999999 + -2038567.700000 + 5117301.800000 + 4520968.700000 + 3415.240000 + -3663.560000 + 5671.210000 + + + 2023-06-19 10:09:15.000000 + -2035151.600000 + 5113635.300000 + 4526637.500000 + 3416.940000 + -3669.660000 + 5666.220000 + + + 2023-06-19 10:09:15.999999 + -2031733.800000 + 5109962.500000 + 4532301.200000 + 3418.630000 + -3675.750000 + 5661.230000 + + + 2023-06-19 10:09:17.000000 + -2028314.300000 + 5106283.800000 + 4537960.000000 + 3420.310000 + -3681.840000 + 5656.230000 + + + 2023-06-19 10:09:17.999999 + -2024893.200000 + 5102598.900000 + 4543613.700000 + 3421.990000 + -3687.930000 + 5651.220000 + + + 2023-06-19 10:09:18.999999 + -2021470.400000 + 5098908.000000 + 4549262.500000 + 3423.670000 + -3694.010000 + 5646.200000 + + + 2023-06-19 10:09:19.999999 + -2018045.900000 + 5095210.900000 + 4554906.300000 + 3425.340000 + -3700.090000 + 5641.180000 + + + 2023-06-19 10:09:20.999999 + -2014619.700000 + 5091507.800000 + 4560545.000000 + 3427.010000 + -3706.160000 + 5636.160000 + + + 2023-06-19 10:09:22.000000 + -2011191.900000 + 5087798.600000 + 4566178.700000 + 3428.670000 + -3712.240000 + 5631.130000 + + + 2023-06-19 10:09:22.999999 + -2007762.400000 + 5084083.400000 + 4571807.300000 + 3430.330000 + -3718.300000 + 5626.090000 + + + 2023-06-19 10:09:23.999999 + -2004331.200000 + 5080362.100000 + 4577430.900000 + 3431.980000 + -3724.370000 + 5621.040000 + + + 2023-06-19 10:09:25.000000 + -2000898.400000 + 5076634.700000 + 4583049.500000 + 3433.630000 + -3730.430000 + 5615.990000 + + + 2023-06-19 10:09:26.000000 + -1997464.000000 + 5072901.300000 + 4588663.000000 + 3435.270000 + -3736.480000 + 5610.930000 + + + 2023-06-19 10:09:26.999999 + -1994027.900000 + 5069161.800000 + 4594271.400000 + 3436.910000 + -3742.540000 + 5605.870000 + + + 2023-06-19 10:09:28.000000 + -1990590.200000 + 5065416.200000 + 4599874.700000 + 3438.550000 + -3748.580000 + 5600.800000 + + + 2023-06-19 10:09:29.000000 + -1987150.800000 + 5061664.600000 + 4605473.000000 + 3440.180000 + -3754.630000 + 5595.720000 + + + 2023-06-19 10:09:29.999999 + -1983709.800000 + 5057906.900000 + 4611066.200000 + 3441.800000 + -3760.670000 + 5590.640000 + + + 2023-06-19 10:09:31.000000 + -1980267.200000 + 5054143.200000 + 4616654.300000 + 3443.420000 + -3766.710000 + 5585.550000 + + + 2023-06-19 10:09:32.000000 + -1976823.000000 + 5050373.500000 + 4622237.400000 + 3445.040000 + -3772.740000 + 5580.460000 + + + 2023-06-19 10:09:32.999999 + -1973377.100000 + 5046597.700000 + 4627815.300000 + 3446.650000 + -3778.770000 + 5575.360000 + + + 2023-06-19 10:09:34.000000 + -1969929.700000 + 5042816.000000 + 4633388.100000 + 3448.260000 + -3784.790000 + 5570.250000 + + + 2023-06-19 10:09:34.999999 + -1966480.600000 + 5039028.200000 + 4638955.900000 + 3449.860000 + -3790.810000 + 5565.140000 + + + 2023-06-19 10:09:35.999999 + -1963030.000000 + 5035234.400000 + 4644518.500000 + 3451.460000 + -3796.830000 + 5560.020000 + + + 2023-06-19 10:09:36.999999 + -1959577.700000 + 5031434.600000 + 4650076.000000 + 3453.050000 + -3802.840000 + 5554.890000 + + + 2023-06-19 10:09:37.999999 + -1956123.900000 + 5027628.700000 + 4655628.400000 + 3454.640000 + -3808.850000 + 5549.760000 + + + 2023-06-19 10:09:39.000000 + -1952668.400000 + 5023816.900000 + 4661175.600000 + 3456.220000 + -3814.860000 + 5544.620000 + + + 2023-06-19 10:09:40.000000 + -1949211.400000 + 5019999.000000 + 4666717.700000 + 3457.800000 + -3820.860000 + 5539.480000 + + + 2023-06-19 10:09:40.999999 + -1945752.800000 + 5016175.100000 + 4672254.600000 + 3459.370000 + -3826.860000 + 5534.330000 + + + 2023-06-19 10:09:42.000000 + -1942292.700000 + 5012345.300000 + 4677786.400000 + 3460.940000 + -3832.850000 + 5529.180000 + + + 2023-06-19 10:09:42.999999 + -1938831.000000 + 5008509.400000 + 4683313.000000 + 3462.510000 + -3838.840000 + 5524.010000 + + + 2023-06-19 10:09:44.000000 + -1935367.700000 + 5004667.600000 + 4688834.500000 + 3464.070000 + -3844.830000 + 5518.850000 + + + 2023-06-19 10:09:44.999999 + -1931902.800000 + 5000819.800000 + 4694350.800000 + 3465.620000 + -3850.810000 + 5513.670000 + + + 2023-06-19 10:09:45.999999 + -1928436.400000 + 4996966.000000 + 4699861.900000 + 3467.170000 + -3856.780000 + 5508.490000 + + + 2023-06-19 10:09:46.999999 + -1924968.500000 + 4993106.300000 + 4705367.800000 + 3468.720000 + -3862.760000 + 5503.310000 + + + 2023-06-19 10:09:48.000000 + -1921499.000000 + 4989240.500000 + 4710868.500000 + 3470.260000 + -3868.730000 + 5498.110000 + + + 2023-06-19 10:09:49.000000 + -1918028.000000 + 4985368.800000 + 4716364.000000 + 3471.790000 + -3874.690000 + 5492.920000 + + + 2023-06-19 10:09:50.000000 + -1914555.400000 + 4981491.100000 + 4721854.300000 + 3473.330000 + -3880.650000 + 5487.710000 + + + 2023-06-19 10:09:51.000000 + -1911081.300000 + 4977607.400000 + 4727339.400000 + 3474.850000 + -3886.610000 + 5482.500000 + + + 2023-06-19 10:09:52.000000 + -1907605.700000 + 4973717.800000 + 4732819.400000 + 3476.380000 + -3892.560000 + 5477.290000 + + + 2023-06-19 10:09:52.999999 + -1904128.500000 + 4969822.300000 + 4738294.100000 + 3477.890000 + -3898.510000 + 5472.060000 + + + 2023-06-19 10:09:54.000000 + -1900649.800000 + 4965920.800000 + 4743763.500000 + 3479.410000 + -3904.460000 + 5466.840000 + + + 2023-06-19 10:09:55.000000 + -1897169.700000 + 4962013.400000 + 4749227.800000 + 3480.920000 + -3910.400000 + 5461.600000 + + + 2023-06-19 10:09:55.999999 + -1893688.000000 + 4958100.000000 + 4754686.800000 + 3482.420000 + -3916.340000 + 5456.360000 + + + 2023-06-19 10:09:56.999999 + -1890204.900000 + 4954180.700000 + 4760140.600000 + 3483.920000 + -3922.270000 + 5451.110000 + + + 2023-06-19 10:09:57.999999 + -1886720.200000 + 4950255.500000 + 4765589.100000 + 3485.410000 + -3928.200000 + 5445.860000 + + + 2023-06-19 10:09:58.999999 + -1883234.100000 + 4946324.400000 + 4771032.400000 + 3486.900000 + -3934.120000 + 5440.600000 + + + 2023-06-19 10:09:59.999999 + -1879746.400000 + 4942387.300000 + 4776470.400000 + 3488.390000 + -3940.040000 + 5435.340000 + + + 2023-06-19 10:10:01.000000 + -1876257.300000 + 4938444.300000 + 4781903.100000 + 3489.870000 + -3945.960000 + 5430.070000 + + + 2023-06-19 10:10:02.000000 + -1872766.700000 + 4934495.400000 + 4787330.600000 + 3491.340000 + -3951.870000 + 5424.790000 + + + 2023-06-19 10:10:02.999999 + -1869274.600000 + 4930540.500000 + 4792752.700000 + 3492.820000 + -3957.780000 + 5419.510000 + + + 2023-06-19 10:10:04.000000 + -1865781.100000 + 4926579.800000 + 4798169.600000 + 3494.280000 + -3963.690000 + 5414.220000 + + + 2023-06-19 10:10:04.999999 + -1862286.100000 + 4922613.200000 + 4803581.300000 + 3495.740000 + -3969.590000 + 5408.930000 + + + 2023-06-19 10:10:05.999999 + -1858789.600000 + 4918640.700000 + 4808987.600000 + 3497.200000 + -3975.480000 + 5403.630000 + + + 2023-06-19 10:10:06.999999 + -1855291.700000 + 4914662.300000 + 4814388.600000 + 3498.650000 + -3981.370000 + 5398.320000 + + + 2023-06-19 10:10:07.999999 + -1851792.300000 + 4910678.000000 + 4819784.300000 + 3500.100000 + -3987.260000 + 5393.010000 + + + 2023-06-19 10:10:09.000000 + -1848291.500000 + 4906687.800000 + 4825174.700000 + 3501.540000 + -3993.140000 + 5387.690000 + + + 2023-06-19 10:10:09.999999 + -1844789.200000 + 4902691.700000 + 4830559.700000 + 3502.980000 + -3999.020000 + 5382.370000 + + + 2023-06-19 10:10:11.000000 + -1841285.500000 + 4898689.700000 + 4835939.400000 + 3504.410000 + -4004.900000 + 5377.040000 + + + 2023-06-19 10:10:12.000000 + -1837780.300000 + 4894681.900000 + 4841313.800000 + 3505.840000 + -4010.770000 + 5371.700000 + + + 2023-06-19 10:10:13.000000 + -1834273.800000 + 4890668.100000 + 4846682.800000 + 3507.270000 + -4016.640000 + 5366.360000 + + + 2023-06-19 10:10:14.000000 + -1830765.800000 + 4886648.500000 + 4852046.500000 + 3508.690000 + -4022.500000 + 5361.010000 + + + 2023-06-19 10:10:15.000000 + -1827256.400000 + 4882623.100000 + 4857404.800000 + 3510.100000 + -4028.360000 + 5355.660000 + + + 2023-06-19 10:10:16.000000 + -1823745.500000 + 4878591.800000 + 4862757.800000 + 3511.510000 + -4034.210000 + 5350.300000 + + + 2023-06-19 10:10:17.000000 + -1820233.300000 + 4874554.600000 + 4868105.500000 + 3512.920000 + -4040.060000 + 5344.940000 + + + 2023-06-19 10:10:17.999999 + -1816719.700000 + 4870511.600000 + 4873447.700000 + 3514.320000 + -4045.910000 + 5339.570000 + + + 2023-06-19 10:10:19.000000 + -1813204.700000 + 4866462.800000 + 4878784.600000 + 3515.710000 + -4051.750000 + 5334.190000 + + + 2023-06-19 10:10:20.000000 + -1809688.200000 + 4862408.100000 + 4884116.100000 + 3517.100000 + -4057.580000 + 5328.810000 + + + 2023-06-19 10:10:21.000000 + -1806170.400000 + 4858347.600000 + 4889442.200000 + 3518.490000 + -4063.420000 + 5323.420000 + + + 2023-06-19 10:10:21.999999 + -1802651.200000 + 4854281.200000 + 4894762.900000 + 3519.870000 + -4069.250000 + 5318.020000 + + + 2023-06-19 10:10:23.000000 + -1799130.700000 + 4850209.100000 + 4900078.300000 + 3521.250000 + -4075.070000 + 5312.620000 + + + 2023-06-19 10:10:24.000000 + -1795608.700000 + 4846131.100000 + 4905388.200000 + 3522.620000 + -4080.890000 + 5307.220000 + + + 2023-06-19 10:10:25.000000 + -1792085.400000 + 4842047.300000 + 4910692.700000 + 3523.990000 + -4086.710000 + 5301.800000 + + + 2023-06-19 10:10:25.999999 + -1788560.700000 + 4837957.600000 + 4915991.800000 + 3525.350000 + -4092.520000 + 5296.390000 + + + 2023-06-19 10:10:27.000000 + -1785034.700000 + 4833862.200000 + 4921285.600000 + 3526.710000 + -4098.320000 + 5290.960000 + + + 2023-06-19 10:10:27.999999 + -1781507.300000 + 4829761.000000 + 4926573.800000 + 3528.060000 + -4104.130000 + 5285.530000 + + + 2023-06-19 10:10:29.000000 + -1777978.500000 + 4825653.900000 + 4931856.600000 + 3529.410000 + -4109.930000 + 5280.100000 + + + 2023-06-19 10:10:30.000000 + -1774448.500000 + 4821541.100000 + 4937134.000000 + 3530.760000 + -4115.720000 + 5274.660000 + + + 2023-06-19 10:10:30.999999 + -1770917.000000 + 4817422.500000 + 4942406.000000 + 3532.100000 + -4121.510000 + 5269.210000 + + + 2023-06-19 10:10:32.000000 + -1767384.200000 + 4813298.000000 + 4947672.400000 + 3533.430000 + -4127.300000 + 5263.760000 + + + 2023-06-19 10:10:33.000000 + -1763850.100000 + 4809167.900000 + 4952933.500000 + 3534.760000 + -4133.080000 + 5258.300000 + + + 2023-06-19 10:10:33.999999 + -1760314.700000 + 4805031.900000 + 4958189.100000 + 3536.090000 + -4138.850000 + 5252.830000 + + + 2023-06-19 10:10:34.999999 + -1756778.000000 + 4800890.200000 + 4963439.300000 + 3537.410000 + -4144.630000 + 5247.360000 + + + 2023-06-19 10:10:35.999999 + -1753239.900000 + 4796742.700000 + 4968683.900000 + 3538.720000 + -4150.390000 + 5241.890000 + + + 2023-06-19 10:10:37.000000 + -1749700.500000 + 4792589.400000 + 4973923.100000 + 3540.030000 + -4156.160000 + 5236.410000 + + + 2023-06-19 10:10:38.000000 + -1746159.800000 + 4788430.300000 + 4979156.800000 + 3541.340000 + -4161.920000 + 5230.920000 + + + 2023-06-19 10:10:38.999999 + -1742617.900000 + 4784265.600000 + 4984385.000000 + 3542.640000 + -4167.670000 + 5225.430000 + + + 2023-06-19 10:10:39.999999 + -1739074.600000 + 4780095.000000 + 4989607.700000 + 3543.940000 + -4173.420000 + 5219.930000 + + + 2023-06-19 10:10:41.000000 + -1735530.000000 + 4775918.700000 + 4994824.800000 + 3545.230000 + -4179.170000 + 5214.420000 + + + 2023-06-19 10:10:42.000000 + -1731984.100000 + 4771736.600000 + 5000036.500000 + 3546.520000 + -4184.910000 + 5208.910000 + + + 2023-06-19 10:10:43.000000 + -1728436.900000 + 4767548.800000 + 5005242.600000 + 3547.800000 + -4190.650000 + 5203.400000 + + + 2023-06-19 10:10:44.000000 + -1724888.500000 + 4763355.300000 + 5010443.300000 + 3549.080000 + -4196.380000 + 5197.880000 + + + 2023-06-19 10:10:45.000000 + -1721338.700000 + 4759156.000000 + 5015638.400000 + 3550.350000 + -4202.110000 + 5192.350000 + + + 2023-06-19 10:10:46.000000 + -1717787.700000 + 4754951.000000 + 5020828.000000 + 3551.620000 + -4207.830000 + 5186.810000 + + + 2023-06-19 10:10:47.000000 + -1714235.400000 + 4750740.300000 + 5026012.000000 + 3552.880000 + -4213.550000 + 5181.280000 + + + 2023-06-19 10:10:47.999999 + -1710681.900000 + 4746523.800000 + 5031190.500000 + 3554.140000 + -4219.270000 + 5175.730000 + + + 2023-06-19 10:10:49.000000 + -1707127.100000 + 4742301.700000 + 5036363.400000 + 3555.400000 + -4224.980000 + 5170.180000 + + + 2023-06-19 10:10:50.000000 + -1703571.100000 + 4738073.800000 + 5041530.800000 + 3556.650000 + -4230.690000 + 5164.620000 + + + 2023-06-19 10:10:51.000000 + -1700013.800000 + 4733840.200000 + 5046692.600000 + 3557.890000 + -4236.390000 + 5159.060000 + + + 2023-06-19 10:10:51.999999 + -1696455.300000 + 4729601.000000 + 5051848.900000 + 3559.130000 + -4242.090000 + 5153.500000 + + + 2023-06-19 10:10:52.999999 + -1692895.500000 + 4725356.000000 + 5056999.600000 + 3560.370000 + -4247.780000 + 5147.920000 + + + 2023-06-19 10:10:54.000000 + -1689334.500000 + 4721105.300000 + 5062144.700000 + 3561.600000 + -4253.470000 + 5142.340000 + + + 2023-06-19 10:10:55.000000 + -1685772.200000 + 4716849.000000 + 5067284.300000 + 3562.820000 + -4259.150000 + 5136.760000 + + + 2023-06-19 10:10:56.000000 + -1682208.800000 + 4712586.900000 + 5072418.200000 + 3564.050000 + -4264.830000 + 5131.170000 + + + 2023-06-19 10:10:57.000000 + -1678644.100000 + 4708319.200000 + 5077546.600000 + 3565.260000 + -4270.510000 + 5125.570000 + + + 2023-06-19 10:10:57.999999 + -1675078.200000 + 4704045.900000 + 5082669.400000 + 3566.470000 + -4276.180000 + 5119.970000 + + + 2023-06-19 10:10:58.999999 + -1671511.100000 + 4699766.800000 + 5087786.500000 + 3567.680000 + -4281.840000 + 5114.370000 + + + 2023-06-19 10:10:59.999999 + -1667942.800000 + 4695482.100000 + 5092898.100000 + 3568.880000 + -4287.510000 + 5108.750000 + + + 2023-06-19 10:11:01.000000 + -1664373.300000 + 4691191.700000 + 5098004.000000 + 3570.080000 + -4293.160000 + 5103.140000 + + + 2023-06-19 10:11:02.000000 + -1660802.600000 + 4686895.700000 + 5103104.300000 + 3571.270000 + -4298.810000 + 5097.510000 + + + 2023-06-19 10:11:03.000000 + -1657230.700000 + 4682594.000000 + 5108199.000000 + 3572.460000 + -4304.460000 + 5091.880000 + + + 2023-06-19 10:11:03.999999 + -1653657.700000 + 4678286.700000 + 5113288.100000 + 3573.650000 + -4310.110000 + 5086.250000 + + + 2023-06-19 10:11:05.000000 + -1650083.400000 + 4673973.700000 + 5118371.500000 + 3574.820000 + -4315.740000 + 5080.610000 + + + 2023-06-19 10:11:06.000000 + -1646508.000000 + 4669655.100000 + 5123449.300000 + 3576.000000 + -4321.380000 + 5074.960000 + + + 2023-06-19 10:11:06.999999 + -1642931.400000 + 4665330.900000 + 5128521.400000 + 3577.170000 + -4327.010000 + 5069.310000 + + + 2023-06-19 10:11:07.999999 + -1639353.600000 + 4661001.000000 + 5133587.900000 + 3578.330000 + -4332.630000 + 5063.650000 + + + 2023-06-19 10:11:09.000000 + -1635774.700000 + 4656665.600000 + 5138648.700000 + 3579.490000 + -4338.250000 + 5057.990000 + + + 2023-06-19 10:11:10.000000 + -1632194.600000 + 4652324.500000 + 5143703.800000 + 3580.650000 + -4343.870000 + 5052.320000 + + + 2023-06-19 10:11:11.000000 + -1628613.300000 + 4647977.800000 + 5148753.300000 + 3581.800000 + -4349.480000 + 5046.650000 + + + 2023-06-19 10:11:11.999999 + -1625031.000000 + 4643625.500000 + 5153797.200000 + 3582.940000 + -4355.090000 + 5040.970000 + + + 2023-06-19 10:11:12.999999 + -1621447.400000 + 4639267.600000 + 5158835.300000 + 3584.080000 + -4360.690000 + 5035.280000 + + + 2023-06-19 10:11:14.000000 + -1617862.800000 + 4634904.000000 + 5163867.700000 + 3585.220000 + -4366.290000 + 5029.590000 + + + 2023-06-19 10:11:15.000000 + -1614277.000000 + 4630534.900000 + 5168894.500000 + 3586.350000 + -4371.880000 + 5023.900000 + + + 2023-06-19 10:11:16.000000 + -1610690.000000 + 4626160.200000 + 5173915.500000 + 3587.480000 + -4377.470000 + 5018.190000 + + + 2023-06-19 10:11:16.999999 + -1607102.000000 + 4621779.900000 + 5178930.800000 + 3588.600000 + -4383.050000 + 5012.490000 + + + 2023-06-19 10:11:17.999999 + -1603512.800000 + 4617394.100000 + 5183940.400000 + 3589.710000 + -4388.630000 + 5006.770000 + + + 2023-06-19 10:11:19.000000 + -1599922.500000 + 4613002.600000 + 5188944.400000 + 3590.830000 + -4394.210000 + 5001.060000 + + + 2023-06-19 10:11:20.000000 + -1596331.100000 + 4608605.600000 + 5193942.500000 + 3591.930000 + -4399.780000 + 4995.330000 + + + 2023-06-19 10:11:21.000000 + -1592738.600000 + 4604203.000000 + 5198935.000000 + 3593.040000 + -4405.340000 + 4989.600000 + + + 2023-06-19 10:11:22.000000 + -1589145.000000 + 4599794.900000 + 5203921.700000 + 3594.140000 + -4410.900000 + 4983.870000 + + + 2023-06-19 10:11:23.000000 + -1585550.300000 + 4595381.100000 + 5208902.700000 + 3595.230000 + -4416.460000 + 4978.130000 + + + 2023-06-19 10:11:24.000000 + -1581954.500000 + 4590961.900000 + 5213878.000000 + 3596.320000 + -4422.010000 + 4972.380000 + + + 2023-06-19 10:11:24.999999 + -1578357.600000 + 4586537.100000 + 5218847.500000 + 3597.400000 + -4427.550000 + 4966.630000 + + + 2023-06-19 10:11:25.999999 + -1574759.700000 + 4582106.700000 + 5223811.200000 + 3598.480000 + -4433.090000 + 4960.880000 + + + 2023-06-19 10:11:27.000000 + -1571160.700000 + 4577670.800000 + 5228769.200000 + 3599.550000 + -4438.630000 + 4955.110000 + + + 2023-06-19 10:11:28.000000 + -1567560.500000 + 4573229.400000 + 5233721.400000 + 3600.620000 + -4444.160000 + 4949.350000 + + + 2023-06-19 10:11:29.000000 + -1563959.400000 + 4568782.400000 + 5238667.900000 + 3601.690000 + -4449.690000 + 4943.570000 + + + 2023-06-19 10:11:30.000000 + -1560357.100000 + 4564329.900000 + 5243608.600000 + 3602.750000 + -4455.210000 + 4937.800000 + + + 2023-06-19 10:11:30.999999 + -1556753.800000 + 4559871.900000 + 5248543.500000 + 3603.800000 + -4460.730000 + 4932.010000 + + + 2023-06-19 10:11:31.999999 + -1553149.500000 + 4555408.400000 + 5253472.600000 + 3604.850000 + -4466.240000 + 4926.220000 + + + 2023-06-19 10:11:32.999999 + -1549544.100000 + 4550939.400000 + 5258395.900000 + 3605.900000 + -4471.750000 + 4920.430000 + + + 2023-06-19 10:11:34.000000 + -1545937.700000 + 4546464.900000 + 5263313.400000 + 3606.940000 + -4477.260000 + 4914.630000 + + + diff --git a/LAMPSARProcessProgram/RasterProcessTool.vcxproj b/LAMPSARProcessProgram/RasterProcessTool.vcxproj index 847e5ff..85f2c20 100644 --- a/LAMPSARProcessProgram/RasterProcessTool.vcxproj +++ b/LAMPSARProcessProgram/RasterProcessTool.vcxproj @@ -125,6 +125,7 @@ + diff --git a/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters b/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters index bef3bd3..99e980b 100644 --- a/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters +++ b/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters @@ -38,6 +38,9 @@ Source Files + + Resource Files + diff --git a/LAMPSARProcessProgram/ToolBoxWidget.cpp b/LAMPSARProcessProgram/ToolBoxWidget.cpp index 5d349c2..d565631 100644 --- a/LAMPSARProcessProgram/ToolBoxWidget.cpp +++ b/LAMPSARProcessProgram/ToolBoxWidget.cpp @@ -75,7 +75,7 @@ void ToolBoxWidget::initToolbox(QString dlltoolPath) else { FreeLibrary(hmodel); qDebug() << "do not find Register function Plugin: " << plugpath; - return ; + continue ; } } else { @@ -191,7 +191,7 @@ QToolboxTreeWidgetItem::QToolboxTreeWidgetItem(QTreeWidget* IntreeWidgetToolBox, button->setIcon(icon); button->setText(toolName); button->setLayoutDirection(Qt::LeftToRight); - button->setStyleSheet("QPushButton { text-align: left;font-size: 12px; font-weight: normal; }"); + button->setStyleSheet("QPushButton { text-align: left; font-weight: blob; }"); IntreeWidgetToolBox->setItemWidget(actionItem, 0, button); QObject::connect(button, SIGNAL(clicked()), item, SLOT(excute())); item->setParent(IntreeWidgetToolBox); diff --git a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp index b36c743..536a85c 100644 --- a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp +++ b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp @@ -98,8 +98,8 @@ RasterMainWidget::setupActions() { void RasterMainWidget::setupWindow() { mUi->mapCanvasLayout->addWidget(mMapConvas); - setFixedSize(size()); - setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint); + //setFixedSize(size()); + //setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint | Qt::WindowSystemMenuHint); QObject::connect(mMapConvas, &MapCanvas::zoomChanged, this, &RasterMainWidget::zoomChangedHandle); QObject::connect(mMapConvas, &MapCanvas::clicked, this, &RasterMainWidget::clickedHandle); diff --git a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui index 0714264..839020e 100644 --- a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui +++ b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui @@ -2,6 +2,9 @@ RasterMainWidget + + Qt::WindowModal + true @@ -9,8 +12,8 @@ 0 0 - 810 - 637 + 906 + 609 @@ -19,190 +22,187 @@ 0 + + Qt::StrongFocus + - 地图下载器 + LAMP栅格处理主界面 - - - - 0 - 0 - 1441 - 911 - - - - - - - 0 - - - - 地图 - - - - - 0 - 0 - 1241 - 881 - - - - - - - - 1250 - -1 - 191 - 881 - - - - - - - - - - - - 10 - 10 - 171 - 611 - - - - 图层列表 - - - - - 9 - 30 - 151 - 571 - + + + + + + + + 0 + 0 + + + + 0 + + + + 地图 + + + + + + + + + + + + 0 + 0 + - - - - - + + + + + + + 10 + 650 + 171 + 221 + + + + + 0 + 0 + + + + 下载区域 + + + + + 10 + 40 + 151 + 31 + + + + + 0 + 0 + + + + true + + + + + + 10 + 80 + 151 + 25 + + + + + 0 + 0 + + + + 点击开始选择左上角点 + + + 选择左上角 + + + + + + 12 + 140 + 151 + 31 + + + + + 0 + 0 + + + + true + + + + + + 10 + 180 + 151 + 25 + + + + + 0 + 0 + + + + 点击开始选择右下角点 + + + 选择右下角 + + + - - - - - 10 - 650 - 171 - 221 - - - - 下载区域 - - - - - 10 - 40 - 151 - 31 - - - - true - - - - - - 10 - 80 - 151 - 25 - - - - 点击开始选择左上角点 - - - 选择左上角 - - - - - - 12 - 140 - 151 - 31 - - - - true - - - - - - 10 - 180 - 151 - 25 - - - - 点击开始选择右下角点 - - - 选择右下角 - - - - + + - - - - 任务 - - - - - 0 - 0 - 1431 - 871 - - - - - - - + + + 任务 + + + + + 0 + 0 + 1431 + 871 + + + + + + + + - - - - + + + + 0 0 - 810 + 906 22 @@ -275,6 +275,53 @@ + + + + 0 + 0 + + + + 1 + + + + + + + true + + + + 0 + 0 + + + + 图层列表 + + + + + + + + + 0 + 0 + + + + + + + + + + + + 使用教程 diff --git a/RasterMainWidgetGUI/resource/res.qrc b/RasterMainWidgetGUI/resource/res.qrc new file mode 100644 index 0000000..b65814f --- /dev/null +++ b/RasterMainWidgetGUI/resource/res.qrc @@ -0,0 +1,14 @@ + + + theme/mActionPan.svg + theme/mActionRefresh.svg + theme/mActionZoomIn.svg + theme/mActionZoomOut.svg + theme/mActionSelect.svg + theme/mActionDownload.svg + + + plane-red.png + plane-black.png + + diff --git a/Toolbox/LAMPScatterTool/LAMPScatterTool.h b/Toolbox/LAMPScatterTool/LAMPScatterTool.h index b8691ee..1a33424 100644 --- a/Toolbox/LAMPScatterTool/LAMPScatterTool.h +++ b/Toolbox/LAMPScatterTool/LAMPScatterTool.h @@ -10,4 +10,7 @@ class ToolBoxWidget; + + + extern "C" LAMPSCATTERTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox); \ No newline at end of file diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp new file mode 100644 index 0000000..a92a48d --- /dev/null +++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp @@ -0,0 +1,693 @@ +#include "OribtModelOperator.h" +#include +#include +#include +#include +#include +#include +#include + +OrbitElements::OrbitElements() : semiMajorAxis(0), eccentricity(0), inclination(0), +longitudeOfAscendingNode(0), argumentOfPeriapsis(0), trueAnomaly(0) {} + + +/** ģ************************************************************************************/ + +OrbitEstimator::OrbitEstimator() {} + +void OrbitEstimator::estimateOrbit(const SatellitePos& node) { + // ݹڵľ㷨 + elements = estimateKeplerianElements(node); +} + +void OrbitEstimator::saveToXml(const QString& filename) const { + QDomDocument doc("OrbitElements"); + QDomElement root = doc.createElement("OrbitElements"); + doc.appendChild(root); + + QDomElement elem; + + elem = doc.createElement("SemiMajorAxis"); + elem.appendChild(doc.createTextNode(QString::number(elements.semiMajorAxis))); + root.appendChild(elem); + + elem = doc.createElement("Eccentricity"); + elem.appendChild(doc.createTextNode(QString::number(elements.eccentricity))); + root.appendChild(elem); + + elem = doc.createElement("Inclination"); + elem.appendChild(doc.createTextNode(QString::number(elements.inclination))); + root.appendChild(elem); + + elem = doc.createElement("LongitudeOfAscendingNode"); + elem.appendChild(doc.createTextNode(QString::number(elements.longitudeOfAscendingNode))); + root.appendChild(elem); + + elem = doc.createElement("ArgumentOfPeriapsis"); + elem.appendChild(doc.createTextNode(QString::number(elements.argumentOfPeriapsis))); + root.appendChild(elem); + + elem = doc.createElement("TrueAnomaly"); + elem.appendChild(doc.createTextNode(QString::number(elements.trueAnomaly))); + root.appendChild(elem); + + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for writing:" << filename; + return; + } + QTextStream out(&file); + doc.save(out, 4); // Indent by 4 spaces + file.close(); +} + +bool OrbitEstimator::loadFromXml(const QString& filename) { + QFile file(filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for reading:" << filename; + return false; + } + + QDomDocument doc; + if (!doc.setContent(&file)) { + file.close(); + return false; + } + file.close(); + + QDomElement root = doc.documentElement(); + QDomNodeList nodeList = root.elementsByTagName("*"); + + for (int i = 0; i < nodeList.count(); ++i) { + QDomElement element = nodeList.at(i).toElement(); + if (element.tagName() == "SemiMajorAxis") { + elements.semiMajorAxis = element.text().toDouble(); + } + else if (element.tagName() == "Eccentricity") { + elements.eccentricity = element.text().toDouble(); + } + else if (element.tagName() == "Inclination") { + elements.inclination = element.text().toDouble(); + } + else if (element.tagName() == "LongitudeOfAscendingNode") { + elements.longitudeOfAscendingNode = element.text().toDouble(); + } + else if (element.tagName() == "ArgumentOfPeriapsis") { + elements.argumentOfPeriapsis = element.text().toDouble(); + } + else if (element.tagName() == "TrueAnomaly") { + elements.trueAnomaly = element.text().toDouble(); + } + } + + return true; +} + +SatellitePos OrbitEstimator::calculateNode(double time) const { + // ݹڵľ㷨 + return calculateKeplerianNode(elements, time); +} + +SatellitePos OrbitEstimator::predictNode(double time) +{ + return calculateNode(time); +} + +OrbitElements OrbitEstimator::estimateKeplerianElements(const SatellitePos& node) { + // ʾ򵥵ؽֵΪ0 + OrbitElements elements; + elements.semiMajorAxis = 0; + elements.eccentricity = 0; + elements.inclination = 0; + elements.longitudeOfAscendingNode = 0; + elements.argumentOfPeriapsis = 0; + elements.trueAnomaly = 0; + return elements; +} + +SatellitePos OrbitEstimator::calculateKeplerianNode(const OrbitElements& elements, double time) const { + const double G = 6.67430e-11; // m^3 kg^-1 s^-2 + const double M_Earth = 5.972e24; // kg + const double mu = G * M_Earth; // m^3 s^-2 + + double a = elements.semiMajorAxis; + double e = elements.eccentricity; + double i = elements.inclination; + double Omega = elements.longitudeOfAscendingNode; + double omega = elements.argumentOfPeriapsis; + + // ƽ˶ + double n = std::sqrt(mu / (a * a * a)); + + // Ӳοʱ̵ʱƽ쳣 + double t_ref = 0.0; // οʱ̣Ϊ0 + double M = n * (time - t_ref); + + // ⿪շ E - e*sin(E) = M ʹţٵ + double E = M; // ʼ² + double tolerance = 1e-8; + int maxIterations = 100; + for (int iter = 0; iter < maxIterations; ++iter) { + double f = E - e * std::sin(E) - M; + double df = 1 - e * std::cos(E); + double delta = f / df; + E -= delta; + if (std::abs(delta) < tolerance) { + break; + } + } + + // ƫ + double sin_nu = std::sqrt(1 - e * e) * std::sin(E) / (1 - e * std::cos(E)); + double cos_nu = (std::cos(E) - e) / (1 - e * std::cos(E)); + double nu = std::atan2(sin_nu, cos_nu); + + // 뾶 r + double r = a * (1 - e * std::cos(E)); + + // λڹƽϵķ + double Px_prime = r * std::cos(nu); + double Py_prime = r * std::sin(nu); + + // ٶڹƽϵķ + double h = std::sqrt(mu * a * (1 - e * e)); // Ƕ + double Vx_prime = -(h / r) * std::sin(nu); + double Vy_prime = (h / r) * (std::cos(nu) + e); + + // ƽϵתϵ + double cos_Omega = std::cos(Omega); + double sin_Omega = std::sin(Omega); + double cos_omega = std::cos(omega); + double sin_omega = std::sin(omega); + double cos_i = std::cos(i); + double sin_i = std::sin(i); + + double Px = Px_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) + + Py_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i); + double Py = Px_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) + + Py_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i); + double Pz = Px_prime * sin_omega * sin_i + Py_prime * cos_omega * sin_i; + + double Vx = Vx_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) + + Vy_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i); + double Vy = Vx_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) + + Vy_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i); + double Vz = Vx_prime * sin_omega * sin_i + Vy_prime * cos_omega * sin_i; + + SatellitePos node; + node.time = time; + node.Px = Px; + node.Py = Py; + node.Pz = Pz; + node.Vx = Vx; + node.Vy = Vy; + node.Vz = Vz; + return node; +} + +double OrbitEstimator::solveKeplerEquation(double M, double e) const { + double E = M; // ʼ² + double tolerance = 1e-8; + int maxIterations = 100; + for (int iter = 0; iter < maxIterations; ++iter) { + double f = E - e * std::sin(E) - M; + double df = 1 - e * std::cos(E); + double delta = f / df; + E -= delta; + if (std::abs(delta) < tolerance) { + break; + } + } + return E; +} + +/** ʽģ************************************************************************************/ + +void PolynomialOrbitModel::fitPolynomial(const QList& nodes, int degree) { + QList times; + QList positionsX; + QList positionsY; + QList positionsZ; + QList velocitiesX; + QList velocitiesY; + QList velocitiesZ; + + for (const auto& node : nodes) { + times.append(node.time); + positionsX.append(node.Px); + positionsY.append(node.Py); + positionsZ.append(node.Pz); + velocitiesX.append(node.Vx); + velocitiesY.append(node.Vy); + velocitiesZ.append(node.Vz); + } + + + + coefficientsX = leastSquaresFit(times, positionsX, degree); + coefficientsY = leastSquaresFit(times, positionsY, degree); + coefficientsZ = leastSquaresFit(times, positionsZ, degree); + coefficientsVx = leastSquaresFit(times, velocitiesX, degree); + coefficientsVy = leastSquaresFit(times, velocitiesY, degree); + coefficientsVz = leastSquaresFit(times, velocitiesZ, degree); +} + +SatellitePos PolynomialOrbitModel::predictPosition(double time) { + double Px = 0.0; + double Py = 0.0; + double Pz = 0.0; + double Vx = 0.0; + double Vy = 0.0; + double Vz = 0.0; + + for (int i = 0; i < coefficientsX.size(); ++i) { + Px += coefficientsX(i) * std::pow(time, i); + Py += coefficientsY(i) * std::pow(time, i); + Pz += coefficientsZ(i) * std::pow(time, i); + Vx += coefficientsVx(i) * std::pow(time, i); + Vy += coefficientsVy(i) * std::pow(time, i); + Vz += coefficientsVz(i) * std::pow(time, i); + } + + SatellitePos predictedNode; + predictedNode.time = time; + predictedNode.Px = Px; + predictedNode.Py = Py; + predictedNode.Pz = Pz; + predictedNode.Vx = Vx; + predictedNode.Vy = Vy; + predictedNode.Vz = Vz; + return predictedNode; +} + +Eigen::VectorXd PolynomialOrbitModel::leastSquaresFit(const QList& x, const QList& y, int degree) { + int n = x.size(); + Eigen::MatrixXd A=Eigen::MatrixXd::Zero(n, degree + 1); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j <= degree; ++j) { + A(i, j) = std::pow(x[i], j); + } + } + + Eigen::VectorXd b(y.count()); + + for (long i = 0; i < y.count(); i++) { + b(i) = y[i]; + } + + + + Eigen::Vector2d coefficients = A.colPivHouseholderQr().solve(b); + //Eigen::Vector2d coefficientsVector = Eigen::Vector2d::Zero(degree); + //coefficientsVector = coefficients.array(); + return coefficients; +} + +void PolynomialOrbitModel::saveCoefficientsToXml(QDomElement& parent, const Eigen::VectorXd& coefficients, const QString& tagName) const { + QDomDocument doc = parent.ownerDocument(); + QDomElement coeffElement = doc.createElement(tagName); + for (int i = 0; i < coefficients.size(); ++i) { + QDomElement valueElement = doc.createElement("Value"); + valueElement.appendChild(doc.createTextNode(QString::number(coefficients(i)))); + coeffElement.appendChild(valueElement); + } + parent.appendChild(coeffElement); +} + +bool PolynomialOrbitModel::loadCoefficientsFromXml(const QDomElement& parent, Eigen::VectorXd& coefficients, const QString& tagName) { + QDomNodeList coeffNodes = parent.elementsByTagName(tagName); + if (coeffNodes.isEmpty()) { + qWarning() << "Tag" << tagName << "not found in XML."; + return false; + } + + QDomElement coeffElement = coeffNodes.at(0).toElement(); + QDomNodeList valueNodes = coeffElement.elementsByTagName("Value"); + + int size = valueNodes.count(); + coefficients.resize(size); + + for (int i = 0; i < size; ++i) { + QDomElement valueElement = valueNodes.at(i).toElement(); + coefficients(i) = valueElement.text().toDouble(); + } + + return true; +} + +void PolynomialOrbitModel::saveToXml(const QString& filename) const { + QDomDocument doc("PolynomialOrbitModel"); + QDomElement root = doc.createElement("PolynomialOrbitModel"); + doc.appendChild(root); + + saveCoefficientsToXml(root, coefficientsX, "CoefficientsX"); + saveCoefficientsToXml(root, coefficientsY, "CoefficientsY"); + saveCoefficientsToXml(root, coefficientsZ, "CoefficientsZ"); + saveCoefficientsToXml(root, coefficientsVx, "CoefficientsVx"); + saveCoefficientsToXml(root, coefficientsVy, "CoefficientsVy"); + saveCoefficientsToXml(root, coefficientsVz, "CoefficientsVz"); + + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for writing:" << filename; + return; + } + QTextStream out(&file); + doc.save(out, 4); // Indent by 4 spaces + file.close(); +} + +bool PolynomialOrbitModel::loadFromXml(const QString& filename) { + QFile file(filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for reading:" << filename; + return false; + } + + QDomDocument doc; + if (!doc.setContent(&file)) { + file.close(); + return false; + } + file.close(); + + QDomElement root = doc.documentElement(); + + if (!loadCoefficientsFromXml(root, coefficientsX, "CoefficientsX")) return false; + if (!loadCoefficientsFromXml(root, coefficientsY, "CoefficientsY")) return false; + if (!loadCoefficientsFromXml(root, coefficientsZ, "CoefficientsZ")) return false; + if (!loadCoefficientsFromXml(root, coefficientsVx, "CoefficientsVx")) return false; + if (!loadCoefficientsFromXml(root, coefficientsVy, "CoefficientsVy")) return false; + if (!loadCoefficientsFromXml(root, coefficientsVz, "CoefficientsVz")) return false; + + return true; +} + +SatellitePos PolynomialOrbitModel::predictNode(double time) +{ + return predictPosition(time); +} + + + + +/** и************************************************************************************/ + +TwoLineElements::TwoLineElements() {} + +bool TwoLineElements::loadFromTleFile(const QString& filename) { + QFile file(filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for reading:" << filename; + return false; + } + + QTextStream in(&file); + line1 = in.readLine().toStdString(); + line2 = in.readLine().toStdString(); + + if (line1.empty() || line2.empty()) { + qDebug() << "Invalid TLE data in file:" << filename; + return false; + } + + file.close(); + + parseTleLines(); + return true; +} + +void TwoLineElements::parseTleLines() { + // һ + // ʾ1 25544U 98067A 23044.15434167 .00001971 00000-0 39389-4 0 9994 + // ڶ + // ʾ2 25544 51.6416 243.5887 0001672 130.5360 325.0288 15.49472743275958 + + // ʵӦҪϸ֤ʹ +} + +double TwoLineElements::meanMotion() const { + // ڶе53-63λƽ˶ÿת + return std::stod(line2.substr(52, 11)); +} + +double TwoLineElements::semiMajorAxis() const { + const double G = 6.67430e-11; // m^3 kg^-1 s^-2 + const double M_Earth = 5.972e24; // kg + const double mu = G * M_Earth; // m^3 s^-2 + double n = meanMotion() * 2 * M_PI / 60; // תΪ/ + return std::cbrt(mu / (n * n)); +} + +double TwoLineElements::eccentricity() const { + // ڶе9-16λʣСʡԣ + return std::stod("0." + line2.substr(8, 7)); +} + +double TwoLineElements::inclination() const { + // ڶе20-25λбǣȣ + return std::stod(line2.substr(19, 5)); +} + +double TwoLineElements::longitudeOfAscendingNode() const { + // ڶе34-42λྭȣ + return std::stod(line2.substr(33, 9)); +} + +double TwoLineElements::argumentOfPeriapsis() const { + // ڶе45-52λǽصǣȣ + return std::stod(line2.substr(44, 8)); +} + +double TwoLineElements::meanAnomaly() const { + // ڶе64-72λƽǣȣ + return std::stod(line2.substr(63, 9)); +} + +double TwoLineElements::revolutionNumberAtEpoch() const { + // ڶе64-72λƵش + return std::stod(line2.substr(63, 5)); +} + +double TwoLineElements::epochTime() const { + // һе20-32λԪʱ + int year = std::stoi(line1.substr(18, 2)) + 2000; + double dayOfYear = std::stod(line1.substr(20, 12)); + int month = 1, day = 1; + while (dayOfYear > 0) { + int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { + daysInMonth[1] = 29; + } + if (dayOfYear <= daysInMonth[month - 1]) { + day = static_cast(dayOfYear); + break; + } + dayOfYear -= daysInMonth[month - 1]; + month++; + } + QDate date(year, month, day); + QTime time(0, 0, 0); + QDateTime dateTime(date, time); + return dateTime.toSecsSinceEpoch() + (dayOfYear - day) * 86400; +} + +SatellitePos TwoLineElements::calculateNode(double time) const { + return calculateKeplerianNode(time); +} + +SatellitePos TwoLineElements::predictNode(double time) +{ + return calculateNode(time); +} + +SatellitePos TwoLineElements::calculateKeplerianNode(double time) const { + const double G = 6.67430e-11; // m^3 kg^-1 s^-2 + const double M_Earth = 5.972e24; // kg + const double mu = G * M_Earth; // m^3 s^-2 + + double a = semiMajorAxis(); + double e = eccentricity(); + double i = inclination() * M_PI / 180.0; + double Omega = longitudeOfAscendingNode() * M_PI / 180.0; + double omega = argumentOfPeriapsis() * M_PI / 180.0; + double M0 = meanAnomaly() * M_PI / 180.0; + + // ƽ˶ + double n = std::sqrt(mu / (a * a * a)); + + // Ӳοʱ̵ʱƽ쳣 + double t_ref = epochTime(); // οʱ + double M = M0 + n * (time - t_ref); + + // ⿪շ E - e*sin(E) = M ʹţٵ + double E = solveKeplerEquation(M, e); + + // ƫ + double sin_nu = std::sqrt(1 - e * e) * std::sin(E) / (1 - e * std::cos(E)); + double cos_nu = (std::cos(E) - e) / (1 - e * std::cos(E)); + double nu = std::atan2(sin_nu, cos_nu); + + // 뾶 r + double r = a * (1 - e * std::cos(E)); + + // λڹƽϵķ + double Px_prime = r * std::cos(nu); + double Py_prime = r * std::sin(nu); + + // ٶڹƽϵķ + double h = std::sqrt(mu * a * (1 - e * e)); // Ƕ + double Vx_prime = -(h / r) * std::sin(nu); + double Vy_prime = (h / r) * (std::cos(nu) + e); + + // ƽϵתϵ + double cos_Omega = std::cos(Omega); + double sin_Omega = std::sin(Omega); + double cos_omega = std::cos(omega); + double sin_omega = std::sin(omega); + double cos_i = std::cos(i); + double sin_i = std::sin(i); + + double Px = Px_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) + + Py_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i); + double Py = Px_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) + + Py_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i); + double Pz = Px_prime * sin_omega * sin_i + Py_prime * cos_omega * sin_i; + + double Vx = Vx_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) + + Vy_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i); + double Vy = Vx_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) + + Vy_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i); + double Vz = Vx_prime * sin_omega * sin_i + Vy_prime * cos_omega * sin_i; + + SatellitePos node; + node.time = time; + node.Px = Px; + node.Py = Py; + node.Pz = Pz; + node.Vx = Vx; + node.Vy = Vy; + node.Vz = Vz; + return node; +} + +double TwoLineElements::solveKeplerEquation(double M, double e) const { + double E = M; // ʼ² + double tolerance = 1e-8; + int maxIterations = 100; + for (int iter = 0; iter < maxIterations; ++iter) { + double f = E - e * std::sin(E) - M; + double df = 1 - e * std::cos(E); + double delta = f / df; + E -= delta; + if (std::abs(delta) < tolerance) { + break; + } + } + return E; +} + + + + +/** ڵļд************************************************************************************/ + +QList loadNodesFromXml(const QString& filename) { + QFile file(filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for reading:" << filename; + return {}; + } + + QDomDocument doc; + if (!doc.setContent(&file)) { + file.close(); + return {}; + } + file.close(); + + QDomElement root = doc.documentElement(); + QDomNodeList gpsParamNodes = root.elementsByTagName("GPSParam"); + + QList loadedNodes; + + for (int i = 0; i < gpsParamNodes.count(); ++i) { + QDomElement paramElement = gpsParamNodes.at(i).toElement(); + + SatellitePos node; + node.time = paramElement.firstChildElement("TimeStamp").text().toDouble(); + node.Px = paramElement.firstChildElement("xPosition").text().toDouble(); + node.Py = paramElement.firstChildElement("yPosition").text().toDouble(); + node.Pz = paramElement.firstChildElement("zPosition").text().toDouble(); + node.Vx = paramElement.firstChildElement("xVelocity").text().toDouble(); + node.Vy = paramElement.firstChildElement("yVelocity").text().toDouble(); + node.Vz = paramElement.firstChildElement("zVelocity").text().toDouble(); + + loadedNodes.append(node); + } + + return loadedNodes; +} + +void saveNodesToXml(const QString& filename, const QList& inposes) { + QDomDocument doc("GPSData"); + QDomElement root = doc.createElement("GPS"); + doc.appendChild(root); + + for (const auto& node : inposes) { + QDomElement paramElement = doc.createElement("GPSParam"); + + QDomElement timeStampElement = doc.createElement("TimeStamp"); + timeStampElement.appendChild(doc.createTextNode(QString::number(node.time))); + paramElement.appendChild(timeStampElement); + + QDomElement xPositionElement = doc.createElement("xPosition"); + xPositionElement.appendChild(doc.createTextNode(QString::number(node.Px))); + paramElement.appendChild(xPositionElement); + + QDomElement yPositionElement = doc.createElement("yPosition"); + yPositionElement.appendChild(doc.createTextNode(QString::number(node.Py))); + paramElement.appendChild(yPositionElement); + + QDomElement zPositionElement = doc.createElement("zPosition"); + zPositionElement.appendChild(doc.createTextNode(QString::number(node.Pz))); + paramElement.appendChild(zPositionElement); + + QDomElement xVelocityElement = doc.createElement("xVelocity"); + xVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vx))); + paramElement.appendChild(xVelocityElement); + + QDomElement yVelocityElement = doc.createElement("yVelocity"); + yVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vy))); + paramElement.appendChild(yVelocityElement); + + QDomElement zVelocityElement = doc.createElement("zVelocity"); + zVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vz))); + paramElement.appendChild(zVelocityElement); + + root.appendChild(paramElement); + } + + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for writing:" << filename; + return; + } + QTextStream out(&file); + doc.save(out, 4); // Indent by 4 spaces + file.close(); +} + +OrbitModelAbstract::OrbitModelAbstract() +{ +} + +OrbitModelAbstract::~OrbitModelAbstract() +{ +} + +SatellitePos OrbitModelAbstract::predictNode(double time) +{ + return SatellitePos(); +} diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h new file mode 100644 index 0000000..0008250 --- /dev/null +++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h @@ -0,0 +1,101 @@ +#ifndef ORIBTMODELOPERATOR_H_ +#define ORIBTMODELOPERATOR_H_ +#include +#include +#include +#include +#include +#include +#include +#include "BaseConstVariable.h" + +QList loadNodesFromXml(const QString& filename); +void saveNodesToXml(const QString& filename, const QList& inposes); + + + +class OrbitModelAbstract { +public: + OrbitModelAbstract(); + ~OrbitModelAbstract(); +public: + virtual SatellitePos predictNode(double time) ; +}; + + + +class OrbitElements { +public: + double semiMajorAxis; // 볤 (a) + double eccentricity; // (e) + double inclination; // б (i) + double longitudeOfAscendingNode; // ྭ () + double argumentOfPeriapsis; // ص () + double trueAnomaly; // () + + OrbitElements(); +}; + +class OrbitEstimator :public OrbitModelAbstract { +public: + OrbitEstimator(); + void estimateOrbit(const SatellitePos& node); + void saveToXml(const QString& filename) const; + bool loadFromXml(const QString& filename); + SatellitePos calculateNode(double time) const; + virtual SatellitePos predictNode(double time) override; +private: + OrbitElements elements; + OrbitElements estimateKeplerianElements(const SatellitePos& node); + SatellitePos calculateKeplerianNode(const OrbitElements& elements, double time) const; + double solveKeplerEquation(double M, double e) const; +}; + +class PolynomialOrbitModel :public OrbitModelAbstract { +public: + void fitPolynomial(const QList& nodes, int degree=3); + SatellitePos predictPosition(double time); + void saveToXml(const QString& filename) const; + bool loadFromXml(const QString& filename); + virtual SatellitePos predictNode(double time) override; +private: + Eigen::VectorXd coefficientsX; + Eigen::VectorXd coefficientsY; + Eigen::VectorXd coefficientsZ; + Eigen::VectorXd coefficientsVx; + Eigen::VectorXd coefficientsVy; + Eigen::VectorXd coefficientsVz; + + Eigen::VectorXd leastSquaresFit(const QList& x, const QList& y, int degree); + void saveCoefficientsToXml(QDomElement& parent, const Eigen::VectorXd& coefficients, const QString& tagName) const; + bool loadCoefficientsFromXml(const QDomElement& parent, Eigen::VectorXd& coefficients, const QString& tagName); +}; + + + + +class TwoLineElements :public OrbitModelAbstract { +public: + TwoLineElements(); + bool loadFromTleFile(const QString& filename); + SatellitePos calculateNode(double time) const; + virtual SatellitePos predictNode(double time) override; +private: + std::string line1; + std::string line2; + + void parseTleLines(); + double meanMotion() const; + double semiMajorAxis() const; + double eccentricity() const; + double inclination() const; + double longitudeOfAscendingNode() const; + double argumentOfPeriapsis() const; + double meanAnomaly() const; + double revolutionNumberAtEpoch() const; + double epochTime() const; + double solveKeplerEquation(double M, double e) const; + SatellitePos calculateKeplerianNode(double time) const; +}; + +#endif \ No newline at end of file diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp new file mode 100644 index 0000000..a5d3f6e --- /dev/null +++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp @@ -0,0 +1,73 @@ + + +#include "QSimulationSARPolynomialOrbitModel.h" +#include "ui_QSimulationSARPolynomialOrbitModel.h" +#include +#include "OribtModelOperator.h" + +QSimulationPolynomialSAROrbitModel::QSimulationPolynomialSAROrbitModel(QWidget *parent) + : QDialog(parent),ui(new Ui::QSimulationSARPolynomialOrbitModelClass) +{ + ui->setupUi(this); + connect(ui->pushButtongpxml, SIGNAL(clicked(bool)), this, SLOT(onpushButtongpxmlClicked(bool))); + connect(ui->pushButtonOrbitModel, SIGNAL(clicked(bool)), this, SLOT(onpushButtonOrbitModelClicked(bool))); + connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(onbtnaccepted())); + connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(onbtnrejected())); +} + +QSimulationPolynomialSAROrbitModel::~QSimulationPolynomialSAROrbitModel() +{} + +void QSimulationPolynomialSAROrbitModel::onpushButtongpxmlClicked(bool) +{ + // ļѡԻѡһ .tif ļ + QString fileName = QFileDialog::getOpenFileName(this, + u8"GPS xml", // Ի + "", // ʼĿ¼Ϊ· + u8"xml Files (*.xml)"); // ļ͹ + + if (!fileName.isEmpty()) { + this->ui->gpsXmlPathEdit->setText(fileName); + } + else { + QMessageBox::information(this, u8"ûѡļ", u8"ûѡκļ"); + } +} +void QSimulationPolynomialSAROrbitModel::onpushButtonOrbitModelClicked(bool) +{ + // ļѡԻѡһ .tif ļ + QString fileName = QFileDialog::getSaveFileName(this, + u8"Polynomial GPS Model xml", // Ի + "", // ʼĿ¼Ϊ· + u8"xml Files (*.xml)"); // ļ͹ + + if (!fileName.isEmpty()) { + this->ui->gpsXmlPathEdit->setText(fileName); + } + else { + QMessageBox::information(this, u8"ûѡļ", u8"ûѡκļ"); + } +} + +void QSimulationPolynomialSAROrbitModel::onbtnaccepted() +{ + QString gpsxmlpath = this->ui->gpsXmlPathEdit->text(); + QString outmodelpath = this->ui->modelxmlPathEdit->text(); + qDebug() << "Input GPS Xml:\t" << gpsxmlpath; + qDebug() << "out Model Xml:\t" << outmodelpath; + + PolynomialOrbitModel model; + QList sateposes = loadNodesFromXml(gpsxmlpath); + model.fitPolynomial(sateposes); + model.saveToXml(outmodelpath); + qDebug() << "PolynomialSAROrbitModel fit finished!!"; + QMessageBox::information(this, u8"Ϣ", u8"ģϳɹ"); +} + +void QSimulationPolynomialSAROrbitModel::onbtnrejected() +{ + this->close(); +} + + + diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h new file mode 100644 index 0000000..0d628a4 --- /dev/null +++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h @@ -0,0 +1,27 @@ +#pragma once +#include "SimulationSARToolAPI.h" +#include "QToolAbstract.h" +#include + +namespace Ui { + class QSimulationSARPolynomialOrbitModelClass; +} + + +class SIMULATIONSARTOOLAPI_EXPORT QSimulationPolynomialSAROrbitModel : public QDialog +{ + Q_OBJECT + +public: + QSimulationPolynomialSAROrbitModel(QWidget *parent = nullptr); + ~QSimulationPolynomialSAROrbitModel(); + +public slots: + void onpushButtongpxmlClicked(bool); + void onpushButtonOrbitModelClicked(bool); + void onbtnaccepted(); + void onbtnrejected(); +private: + Ui::QSimulationSARPolynomialOrbitModelClass* ui; + +}; diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui new file mode 100644 index 0000000..549ee21 --- /dev/null +++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui @@ -0,0 +1,120 @@ + + + QSimulationSARPolynomialOrbitModelClass + + + + 0 + 0 + 600 + 170 + + + + 多项式轨道模型 + + + + + + + 0 + 30 + + + + 多项式轨道模型参数: + + + + + + + + 0 + 30 + + + + 选择 + + + + + + + + 0 + 30 + + + + 选择 + + + + + + + + 0 + 30 + + + + D:/Programme/vs2022/RasterMergeTest/simulationData/GF3_Simulation_GPSNode.xml + + + + + + + + 0 + 30 + + + + D:/Programme/vs2022/RasterMergeTest/simulationData/demdataset/demxyz.bin + + + + + + + + 0 + 30 + + + + GPS xml 地址: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.cpp b/Toolbox/SimulationSARTool/SimulationSARTool.cpp index 2b498ca..3878fa5 100644 --- a/Toolbox/SimulationSARTool/SimulationSARTool.cpp +++ b/Toolbox/SimulationSARTool/SimulationSARTool.cpp @@ -2,6 +2,7 @@ #include "LAMPMainWidget.h" #include "RasterMainWidget.h" #include "ToolBoxWidget.h" +#include "QSimulationSARPolynomialOrbitModel.h" SARSimlulationRFPCToolButton::SARSimlulationRFPCToolButton(QWidget* parent) { @@ -42,16 +43,35 @@ void SARSimulationTBPImageToolButton::excute() + +QSimulationSAROrbitModelToolButton::QSimulationSAROrbitModelToolButton(QWidget* parent) +{ + this->toolPath = QVector(0); + this->toolPath.push_back(u8"湤߿"); + this->toolname = QString(u8""); +} + +QSimulationSAROrbitModelToolButton::~QSimulationSAROrbitModelToolButton() +{ +} +void QSimulationSAROrbitModelToolButton::excute() +{ + QSimulationPolynomialSAROrbitModel* dialog = new QSimulationPolynomialSAROrbitModel; + dialog->show(); +} + + + void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox) { SARSimlulationRFPCToolButton* items6 = new SARSimlulationRFPCToolButton(toolbox); SARSimulationTBPImageToolButton* items7 = new SARSimulationTBPImageToolButton(toolbox); - + QSimulationSAROrbitModelToolButton* items8 = new QSimulationSAROrbitModelToolButton(toolbox); emit toolbox->addBoxToolItemSIGNAL(items6); emit toolbox->addBoxToolItemSIGNAL(items7); - + emit toolbox->addBoxToolItemSIGNAL(items8); -} +} \ No newline at end of file diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.h b/Toolbox/SimulationSARTool/SimulationSARTool.h index c26171a..8b1cca4 100644 --- a/Toolbox/SimulationSARTool/SimulationSARTool.h +++ b/Toolbox/SimulationSARTool/SimulationSARTool.h @@ -14,6 +14,15 @@ class ToolBoxWidget; +class SIMULATIONSARTOOL_EXPORT SARSimlulationRFPCToolButton : public QToolAbstract { + Q_OBJECT +public: + SARSimlulationRFPCToolButton(QWidget* parent = nullptr); + ~SARSimlulationRFPCToolButton(); +public slots: + virtual void excute() override; + +}; class SIMULATIONSARTOOL_EXPORT SARSimulationTBPImageToolButton : public QToolAbstract { @@ -26,18 +35,20 @@ public slots: }; -class SIMULATIONSARTOOL_EXPORT SARSimlulationRFPCToolButton : public QToolAbstract { + + + +class QSimulationSAROrbitModelToolButton :public QToolAbstract { Q_OBJECT public: - SARSimlulationRFPCToolButton(QWidget* parent = nullptr); - ~SARSimlulationRFPCToolButton(); + QSimulationSAROrbitModelToolButton(QWidget* parent = nullptr); + ~QSimulationSAROrbitModelToolButton(); public slots: + virtual void excute() override; - }; - extern "C" SIMULATIONSARTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox); diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj index bc546b0..4ac6913 100644 --- a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj +++ b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj @@ -64,7 +64,7 @@ - ..\..\BaseCommonLibrary;..\..\BaseCommonLibrary\BaseTool;..\..\BaseCommonLibrary\ToolAbstract;..\..\GPUBaseLib\GPUTool;.\SimulationSAR;.;..\..\LAMPSARProcessProgram\ToolBoxManager;..\..\RasterMainWidgetGUI\RasterMainWidget;..\..\LAMPSARProcessProgram;..\..\RasterMainWidgetGUI;$(VC_IncludePath);$(WindowsSDK_IncludePath) + ..\..\BaseCommonLibrary;..\..\BaseCommonLibrary\BaseTool;..\..\BaseCommonLibrary\ToolAbstract;..\..\GPUBaseLib\GPUTool;.\SimulationSAR;.;..\..\LAMPSARProcessProgram\ToolBoxManager;..\..\RasterMainWidgetGUI\RasterMainWidget;..\..\LAMPSARProcessProgram;..\..\RasterMainWidgetGUI;.\PowerSimulationIncoherent;$(VC_IncludePath);$(WindowsSDK_IncludePath) $(SolutionDir)$(Platform)\$(Configuration)\Toolbox\ PluginTool_$(ProjectName) @@ -111,6 +111,8 @@ + + @@ -121,6 +123,8 @@ + + @@ -147,6 +151,7 @@ + diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters index a61744d..4ed2221 100644 --- a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters +++ b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters @@ -24,6 +24,9 @@ {2d0ea8a6-e32f-4ebb-b8df-3f1afdfa2b00} + + {9b848585-2348-400d-b12a-dd79a2a71007} + @@ -53,6 +56,9 @@ Header Files + + PowerSimulationIncoherent + @@ -85,6 +91,12 @@ SimulationSAR + + PowerSimulationIncoherent + + + PowerSimulationIncoherent + @@ -99,6 +111,9 @@ SimulationSAR + + PowerSimulationIncoherent + @@ -116,6 +131,9 @@ Header Files + + PowerSimulationIncoherent +