227 lines
6.4 KiB
Matlab
227 lines
6.4 KiB
Matlab
|
% n0= [-1944902.1250000000 4077521.2500000000 4487326.5000000000 ];
|
|||
|
% n1= [-1944873.0000000000 4077511.0000000000 4487348.5000000000 ];
|
|||
|
% n2= [-1944922.0000000000 4077512.0000000000 4487326.5000000000 ];
|
|||
|
% n3= [-1944931.3750000000 4077531.5000000000 4487305.0000000000 ];
|
|||
|
% n4= [-1944882.3750000000 4077530.7500000000 4487326.5000000000 ];
|
|||
|
%
|
|||
|
% n01 = n1 - n0, n02 = n2 - n0, n03 = n3 - n0, n04 = n4 - n0;
|
|||
|
%
|
|||
|
% VN=(cross(n01, n04) + cross(n04, n03) + cross(n03, n02) + cross(n02, n01)) * 0.25;
|
|||
|
% VNorm=VN./norm(VN);
|
|||
|
clear,clc,close all
|
|||
|
|
|||
|
|
|||
|
% 打开二进制文件
|
|||
|
fileID = fopen('E:\\LAMPCAE_SCANE\\outTestEcho\\GF3_Simulation.gpspos.data', 'rb'); % 假设二进制文件名为 'data.bin'
|
|||
|
|
|||
|
% 定义每个数据字段的数据类型
|
|||
|
% 假设每个数据是双精度浮动数(8字节)
|
|||
|
dataType = 'double';
|
|||
|
|
|||
|
% 读取数据:根据你的数据格式,数据长度为 16 * 8 字节(每个元素8字节)
|
|||
|
% 例如:每16个数据项为一组(对应prf_id)
|
|||
|
numFields = 19; % 每组数据的字段数
|
|||
|
PRFnumRecords = 15382; % 假设有100个记录,你可以根据实际情况修改
|
|||
|
|
|||
|
% 读取所有记录的数据
|
|||
|
rawData = fread(fileID, numFields * PRFnumRecords, dataType);
|
|||
|
|
|||
|
% 关闭文件
|
|||
|
fclose(fileID);
|
|||
|
|
|||
|
% 解析数据为结构体数组
|
|||
|
data = struct();
|
|||
|
AntDirecX=zeros(PRFnumRecords,1);
|
|||
|
AntDirecY=zeros(PRFnumRecords,1);
|
|||
|
AntDirecZ=zeros(PRFnumRecords,1);
|
|||
|
Px=zeros(PRFnumRecords,1);
|
|||
|
Py=zeros(PRFnumRecords,1);
|
|||
|
Pz=zeros(PRFnumRecords,1);
|
|||
|
|
|||
|
Vx=zeros(PRFnumRecords,1);
|
|||
|
Vy=zeros(PRFnumRecords,1);
|
|||
|
Vz=zeros(PRFnumRecords,1);
|
|||
|
|
|||
|
% 假设你的数据在 rawData 中按顺序排列
|
|||
|
% 例如,解析 prf_id = 0, 1, 2...的相关数据
|
|||
|
for prf_id = 0:PRFnumRecords-1
|
|||
|
idx = prf_id * numFields + 1;
|
|||
|
data(prf_id+1).prf_time = rawData(idx); % prf_time + imageStarttime
|
|||
|
Px(prf_id+1) = rawData(idx+1); % sateOirbtNode.Px
|
|||
|
Py(prf_id+1) = rawData(idx+2); % sateOirbtNode.Py
|
|||
|
Pz(prf_id+1) = rawData(idx+3); % sateOirbtNode.Pz
|
|||
|
Vx(prf_id+1) = rawData(idx+4); % sateOirbtNode.Vx
|
|||
|
Vy(prf_id+1) = rawData(idx+5); % sateOirbtNode.Vy
|
|||
|
Vz(prf_id+1) = rawData(idx+6); % sateOirbtNode.Vz
|
|||
|
AntDirecX(prf_id+1) = rawData(idx+7); % sateOirbtNode.AntDirecX
|
|||
|
AntDirecY(prf_id+1) = rawData(idx+8); % sateOirbtNode.AntDirecY
|
|||
|
AntDirecZ(prf_id+1) = rawData(idx+9); % sateOirbtNode.AntDirecZ
|
|||
|
data(prf_id+1).AVx = rawData(idx+10); % sateOirbtNode.AVx
|
|||
|
data(prf_id+1).AVy = rawData(idx+11); % sateOirbtNode.AVy
|
|||
|
data(prf_id+1).AVz = rawData(idx+12); % sateOirbtNode.AVz
|
|||
|
data(prf_id+1).lon = rawData(idx+13); % outP.lon
|
|||
|
data(prf_id+1).lat = rawData(idx+14); % outP.lat
|
|||
|
data(prf_id+1).ati = rawData(idx+15); % outP.ati
|
|||
|
end
|
|||
|
|
|||
|
% 查看解析后的数据
|
|||
|
disp(data);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
fileID = fopen('D:\\Programme\\vs2022\\RasterMergeTest\\TestData\\outData\\tmp\\ImageX.dat', 'rb'); % 假设二进制文件名为 'data.bin'
|
|||
|
dataType = 'float';
|
|||
|
numFields = 5400; % 每组数据的字段数
|
|||
|
numRecords = 5400; % 假设有100个记录,你可以根据实际情况修改
|
|||
|
demX = fread(fileID, numFields * numRecords, dataType);
|
|||
|
demX=reshape(demX,[numRecords,numRecords]);
|
|||
|
fclose(fileID);
|
|||
|
|
|||
|
|
|||
|
fileID = fopen('D:\\Programme\\vs2022\\RasterMergeTest\\TestData\\outData\\tmp\\ImageY.dat', 'rb'); % 假设二进制文件名为 'data.bin'
|
|||
|
dataType = 'float';
|
|||
|
numFields = 5400; % 每组数据的字段数
|
|||
|
numRecords = 5400; % 假设有100个记录,你可以根据实际情况修改
|
|||
|
demY = fread(fileID, numFields * numRecords, dataType);
|
|||
|
demY=reshape(demY,[numRecords,numRecords]);
|
|||
|
fclose(fileID);
|
|||
|
|
|||
|
fileID = fopen('D:\\Programme\\vs2022\\RasterMergeTest\\TestData\\outData\\tmp\\ImageZ.dat', 'rb'); % 假设二进制文件名为 'data.bin'
|
|||
|
dataType = 'float';
|
|||
|
numFields = 5400; % 每组数据的字段数
|
|||
|
numRecords = 5400; % 假设有100个记录,你可以根据实际情况修改
|
|||
|
demZ = fread(fileID, numFields * numRecords, dataType);
|
|||
|
demZ=reshape(demZ,[numRecords,numRecords]);
|
|||
|
fclose(fileID);
|
|||
|
|
|||
|
|
|||
|
%% 绘制成像平面
|
|||
|
Rn=884053;
|
|||
|
Rf=942069;
|
|||
|
|
|||
|
|
|||
|
data_ant_norm=(AntDirecX.^2+AntDirecY.^2+AntDirecZ.^2).^0.5;
|
|||
|
|
|||
|
AntDirecX=AntDirecX./data_ant_norm;
|
|||
|
AntDirecY=AntDirecY./data_ant_norm;
|
|||
|
AntDirecZ=AntDirecZ./data_ant_norm;
|
|||
|
|
|||
|
Rlist=linspace(Rn,Rf,300);
|
|||
|
ImageX=zeros(PRFnumRecords,300);
|
|||
|
ImageY=zeros(PRFnumRecords,300);
|
|||
|
ImageZ=zeros(PRFnumRecords,300);
|
|||
|
|
|||
|
for i=1:PRFnumRecords
|
|||
|
ImageX(i,:)=Px(i,:) + Rlist.*AntDirecX(i,:);
|
|||
|
ImageY(i,:)=Py(i,:) + Rlist.*AntDirecY(i,:);
|
|||
|
ImageZ(i,:)=Pz(i,:) + Rlist.*AntDirecZ(i,:);
|
|||
|
end
|
|||
|
B=[AntDirecX(1,1),AntDirecY(1,1),AntDirecZ(1,1)];
|
|||
|
A=[Px(1,1)-Px(2,1),Py(1,1)-Py(2,1),Pz(1,1)-Pz(2,1)] ;
|
|||
|
V=[Vx(1,1),Vy(1,1),Vz(1,1)];
|
|||
|
% 计算点积
|
|||
|
dotProduct = dot(A,B);
|
|||
|
|
|||
|
% 计算模长
|
|||
|
normA = norm(A);
|
|||
|
normB = norm(B);
|
|||
|
|
|||
|
% 计算夹角的余弦值
|
|||
|
cosTheta = acos(dotProduct / (normA * normB));
|
|||
|
cosTheta*180/pi
|
|||
|
|
|||
|
tp=[-2023401.250000,4104205.500000,4428297.000000];
|
|||
|
TP=Px.*0;
|
|||
|
for i=1:PRFnumRecords
|
|||
|
TP(i,:)=sqrt((Px(i,:) -tp(1)).^2+(Py(i,:) -tp(2)).^2+(Pz(i,:) -tp(3)).^2);
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
figure,
|
|||
|
plot(TP )
|
|||
|
|
|||
|
|
|||
|
|
|||
|
PR=(Px.^2+Py.^2+Pz.^2).^0.5;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
ImageR=(ImageX.^2+ImageY.^2+ImageZ.^2).^0.5;
|
|||
|
|
|||
|
|
|||
|
figure,
|
|||
|
plot(ImageR(:,1)),hold on
|
|||
|
plot(ImageR(:,end)),hold on
|
|||
|
plot(PR),hold on
|
|||
|
legend(["Rn","Rf","Rs"])
|
|||
|
|
|||
|
a=[Px-mean(demX,"all"),Py-mean(demY,"all"),Pz-mean(demZ,"all")];
|
|||
|
a=(a(:,1).^2+a(:,2).^2+a(:,3).^2).^0.5;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
figure,
|
|||
|
surfl(ImageX,ImageY,ImageZ),shading flat,hold on
|
|||
|
scatter3(mean(demX,"all"),mean(demY,"all"),mean(demZ,"all"),'red','filled'),shading flat,hold on
|
|||
|
plot3(Px,Py,Pz,'red')
|
|||
|
xlabel("X")
|
|||
|
ylabel("Y")
|
|||
|
zlabel("Z")
|
|||
|
view([-90.6000010944003 90]);
|
|||
|
|
|||
|
|
|||
|
dl=sqrt((Px(1)-Px(end)).^2+(Py(1)-Py(end)).^2+(Pz(1)-Pz(end)).^2);
|
|||
|
|
|||
|
R=7;
|
|||
|
ImageR=((Px(10000,1)-R-Px).^2+(Py(10000,1)-R-Py).^2+(Pz(10000,1)-R-Pz).^2).^0.5;
|
|||
|
figure,
|
|||
|
plot(ImageR)
|
|||
|
|
|||
|
|
|||
|
P=zeros(100*100,3);
|
|||
|
pp=1;
|
|||
|
for i=1:100
|
|||
|
for j=1:100
|
|||
|
[latitude,longitude,height]=XYZ2LLA(ImageX(i,j),ImageY(i,j),ImageZ(i,j));
|
|||
|
P(pp,:)=[latitude,longitude,height];
|
|||
|
pp=pp+1;
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
% %% 计算
|
|||
|
%
|
|||
|
%
|
|||
|
% Tx=-2001212.875000;
|
|||
|
% Ty=4082207.000000;
|
|||
|
% Tz=4471714.500000;
|
|||
|
% R=((demX-Px(1)).^2+(demY-Py(1)).^2+(demZ-Pz(1)).^2).^0.5;
|
|||
|
% figure,
|
|||
|
% plot(R)
|
|||
|
%
|
|||
|
% imgX=ImageX(3000,150);
|
|||
|
% imgY=ImageY(3000,150);
|
|||
|
% imgZ=ImageZ(3000,150);
|
|||
|
% R1= sqrt((ImageX(1,1)-Px(:,1)).^2+(ImageY(1,1)-Py(:,1)).^2+(ImageZ(1,1)-Pz(:,1)).^2);
|
|||
|
% figure,
|
|||
|
% plot(R1)
|
|||
|
%
|
|||
|
%
|
|||
|
%
|
|||
|
% Timgx=abs(ImageX-Tx);
|
|||
|
% Timgy=abs(ImageY-Ty);
|
|||
|
% Timgz=abs(ImageZ-Tz);
|
|||
|
%
|
|||
|
% [latitude,longitude,height]=XYZ2LLA(ImageX(3000,150),ImageY(3000,150),ImageZ(3000,150))
|
|||
|
%
|
|||
|
%
|
|||
|
%
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|