Commit d97aae8f authored by Hu Jintao's avatar Hu Jintao

显示拓扑变化

parent 83edb31a
...@@ -17,72 +17,86 @@ public class CycleTopo { ...@@ -17,72 +17,86 @@ public class CycleTopo {
ToponetImpl tp = new ToponetImpl(); ToponetImpl tp = new ToponetImpl();
SimData sd = new SimData(); SimData sd = new SimData();
//tp.delHistory(); //tp.delHistory();
File file = new File("topusim_1.txt"); File file = new File("D:\\LabratoryJavaPro\\codingDownload\\latestCoding\\topusim_1.txt");
//D:\LabratoryJavaPro\codingDownload\latestCoding\
List<WeiXingData> wxData = null; List<WeiXingData> wxData = null;
{
try { try {
wxData = wx.iniTopo(file,sd.getZhouqi()); wxData = wx.iniTopo(file,sd.getZhouqi());
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} }
}
//初始topo
double[][] toponet = tp.getWeightedTopology(wxData,sd); sd.setJiange(20);
//去掉ovs sd.setC0(3e10);
double[][] topoNet = new double[30][30];
for (int i = 0;i<topoNet.length;i++){ //存储全周期拓扑
for (int j = 0;j<topoNet.length;j++){
topoNet[i][j] = toponet[i][j];
}
}
HashMap<Integer, double[][]> TopoStore = new HashMap<>(); HashMap<Integer, double[][]> TopoStore = new HashMap<>();
TopoStore.put(0,topoNet);
for (int i = 1;i<sd.getZhouqi()/sd.getJiange(); i++) { out:for (int i = 0; i<sd.getZhouqi()/sd.getJiange(); i++) {
//Thread.sleep(2000);
int time = i * sd.getJiange(); int time = i * sd.getJiange();
List<WeiXingData> changetp = wx.changeTopo(wxData,time); List<WeiXingData> changetp = wx.changeTopo(wxData,time);
double[][] changeTopo = tp.getWeightedTopology(changetp,sd);
double[][] topoChange = tp.getWeightedTopology(changetp,sd);
/*//输出topo
for(int m = 0;m<topoChange.length;m++){
for(int n= 0;n<topoChange[0].length;n++){
System.out.print(topoChange[m][n] + " ");
}
System.out.println(" ");
}*/
//去掉ovs //去掉ovs
for (int k = 0;k<topoNet.length;k++){ //去掉ovs
double[][] topoNet = new double[30][30];
for (int p = 0;p<topoNet.length;p++){
for (int j = 0;j<topoNet.length;j++){ for (int j = 0;j<topoNet.length;j++){
topoNet[k][j] = changeTopo[k][j]; topoNet[p][j] = topoChange[p][j];
} }
} }
//补全对称矩阵
for (int k = 0;k<topoNet.length;k++){ for (int k = 0;k<topoNet.length;k++){
for (int j = k+1;j<topoNet.length;j++){ for (int j = k+1;j<topoNet.length;j++){
topoNet[k][j] = topoNet[j][k]; topoNet[k][j] = topoNet[j][k];
} }
} }
TopoStore.put(i,topoNet); TopoStore.put(i,topoNet);
} }
/*
* 对比全周期拓扑
* count记录重复拓扑行数
* count2记录不同拓扑数目
* */
int count = 0; int count = 0;
int count2 = -1; int count2 = 0;
Iterator<Map.Entry<Integer, double[][]>> iterator = TopoStore.entrySet().iterator(); Iterator<Map.Entry<Integer, double[][]>> iterator = TopoStore.entrySet().iterator();
while(iterator.hasNext()){ while (iterator.hasNext()){
double[][] value = iterator.next().getValue(); double[][] value = iterator.next().getValue();
System.out.println(Arrays.deepToString(value));
System.out.println("=========================================");
System.out.println(count2);
while (iterator.hasNext()){
double[][] valueNext = iterator.next().getValue();
for (int i = 0;i<value.length;i++){ for (int i = 0;i<value.length;i++){
if (i>0){ boolean equals = Arrays.equals(value[i], valueNext[i]);
boolean equals = Arrays.equals(value[i], topoNet[i]);
count += (equals?1:0); count += (equals?1:0);
} }
for (int j = 0;j<topoNet.length;j++){
topoNet[i][j] = value[i][j];
}
}
for (int k = 0;k<topoNet.length;k++){
for (int j = k+1;j<topoNet.length;j++){
topoNet[k][j] = topoNet[j][k];
}
}
if (count != 30){ if (count != 30){
System.out.println(Arrays.deepToString(valueNext));
System.out.println("=========================================");
System.out.println(count2);
count2++; count2++;
} }
/* System.out.println(Arrays.deepToString(topoNet)); count=0;
System.out.println("========================================="); value=valueNext;
System.out.println(count2);*/ }
} }
System.out.println("所有topo完成");
return TopoStore; return TopoStore;
} }
......
package top.ninwoo.test.doMap; package top.ninwoo.test.doMap;
import top.ninwoo.test.sateTopo.entity.SimData; /*import top.ninwoo.test.sateTopo.entity.SimData;
import top.ninwoo.test.sateTopo.entity.WeiXingData; import top.ninwoo.test.sateTopo.entity.WeiXingData;
import top.ninwoo.test.sateTopo.service.impl.ToponetImpl; import top.ninwoo.test.sateTopo.service.impl.ToponetImpl;
import top.ninwoo.test.sateTopo.service.impl.WeixingImpl; import top.ninwoo.test.sateTopo.service.impl.WeixingImpl;
...@@ -16,8 +16,10 @@ public class CycleTopoUnit { ...@@ -16,8 +16,10 @@ public class CycleTopoUnit {
WeixingImpl wx = new WeixingImpl(); WeixingImpl wx = new WeixingImpl();
ToponetImpl tp = new ToponetImpl(); ToponetImpl tp = new ToponetImpl();
SimData sd = new SimData(); SimData sd = new SimData();
sd.setJiange(60);
sd.setC0(3e10);
//tp.delHistory(); //tp.delHistory();
File file = new File("topusim_1.txt"); File file = new File("D:\\LabratoryJavaPro\\codingDownload\\latestCoding\\topusim_1.txt");
//D:\LabratoryJavaPro\codingDownload\latestCoding\ //D:\LabratoryJavaPro\codingDownload\latestCoding\
List<WeiXingData> wxData = null; List<WeiXingData> wxData = null;
{ {
...@@ -36,6 +38,7 @@ public class CycleTopoUnit { ...@@ -36,6 +38,7 @@ public class CycleTopoUnit {
topoNet[i][j] = toponet[i][j]; topoNet[i][j] = toponet[i][j];
} }
} }
//存储全周期拓扑
HashMap<Integer, int[][]> TopoStore = new HashMap<>(); HashMap<Integer, int[][]> TopoStore = new HashMap<>();
TopoStore.put(0,topoNet); TopoStore.put(0,topoNet);
...@@ -56,12 +59,36 @@ public class CycleTopoUnit { ...@@ -56,12 +59,36 @@ public class CycleTopoUnit {
} }
TopoStore.put(i,topoNet); TopoStore.put(i,topoNet);
} }
*//*
* 对比全周期拓扑
* count记录重复拓扑行数
* count2记录不同拓扑数目
* *//*
int count = 0; int count = 0;
int count2 = -1; int count2 = -1;
Iterator<Map.Entry<Integer, int[][]>> iterator = TopoStore.entrySet().iterator(); Iterator<Map.Entry<Integer, int[][]>> iterator = TopoStore.entrySet().iterator();
while(iterator.hasNext()){ while (iterator.hasNext()){
int[][] value = iterator.next().getValue(); int[][] value = iterator.next().getValue();
System.out.println(Arrays.deepToString(value));
System.out.println("=========================================");
while (iterator.hasNext()){
int[][] valueNext = iterator.next().getValue();
for (int i = 0;i<value.length;i++){ for (int i = 0;i<value.length;i++){
boolean equals = Arrays.equals(value[i], valueNext[i]);
count += (equals?1:0);
}
if (count != 30){
System.out.println(Arrays.deepToString(valueNext));
System.out.println("=========================================");
count2++;
}
count=0;
value=valueNext;
}
System.out.println(count2);
}
*//*for (int i = 0;i<value.length;i++){
if (i>0){ if (i>0){
boolean equals = Arrays.equals(value[i], topoNet[i]); boolean equals = Arrays.equals(value[i], topoNet[i]);
count += (equals?1:0); count += (equals?1:0);
...@@ -69,8 +96,8 @@ public class CycleTopoUnit { ...@@ -69,8 +96,8 @@ public class CycleTopoUnit {
for (int j = 0;j<topoNet.length;j++){ for (int j = 0;j<topoNet.length;j++){
topoNet[i][j] = value[i][j]; topoNet[i][j] = value[i][j];
} }
} }*//*
for (int k = 0;k<topoNet.length;k++){ *//*for (int k = 0;k<topoNet.length;k++){
for (int j = k+1;j<topoNet.length;j++){ for (int j = k+1;j<topoNet.length;j++){
topoNet[k][j] = topoNet[j][k]; topoNet[k][j] = topoNet[j][k];
} }
...@@ -78,11 +105,107 @@ public class CycleTopoUnit { ...@@ -78,11 +105,107 @@ public class CycleTopoUnit {
} }
if (count != 30){ if (count != 30){
count2++; count2++;
}*//*
*//* System.out.println(Arrays.deepToString(topoNet));
System.out.println("=========================================");
System.out.println(count2);*//*
return TopoStore;
} }
System.out.println(Arrays.deepToString(topoNet)); }*/
import top.ninwoo.test.sateTopo.entity.SimData;
import top.ninwoo.test.sateTopo.entity.WeiXingData;
import top.ninwoo.test.sateTopo.service.impl.ToponetImpl;
import top.ninwoo.test.sateTopo.service.impl.WeixingImpl;
import java.io.File;
import java.util.*;
public class CycleTopoUnit {
public static void main(String[] args) throws IllegalAccessException{ cycleTp(); }
public static HashMap<Integer, int[][]> cycleTp() throws IllegalAccessException{
//从文本中获取卫星的数据
WeixingImpl wx = new WeixingImpl();
ToponetImpl tp = new ToponetImpl();
SimData sd = new SimData();
//tp.delHistory();
File file = new File("D:\\LabratoryJavaPro\\codingDownload\\latestCoding\\topusim_1.txt");
List<WeiXingData> wxData = wx.iniTopo(file,sd.getZhouqi());
/*int[][] topoInit = tp.getTopology(wxData,sd);
//输出topo
for(int j = 0;j<topoInit.length;j++){
for(int k= 0;k<topoInit[0].length;k++){
System.out.print(topoInit[j][k] + " ");
}
System.out.println(" ");
} */
sd.setJiange(60);
sd.setC0(3e10);
//存储全周期拓扑
HashMap<Integer, int[][]> TopoStore = new HashMap<>();
out:for (int i = 0; i<sd.getZhouqi()/sd.getJiange(); i++) {
//Thread.sleep(2000);
int time = i * sd.getJiange();
List<WeiXingData> changetp = wx.changeTopo(wxData,time);
int[][] topoChange = tp.getTopology(changetp,sd);
/*//输出topo
for(int m = 0;m<topoChange.length;m++){
for(int n= 0;n<topoChange[0].length;n++){
System.out.print(topoChange[m][n] + " ");
}
System.out.println(" ");
}*/
TopoStore.put(i,topoChange);
}
/*
* 对比全周期拓扑
* count记录重复拓扑行数
* count2记录不同拓扑数目
* */
int count = 0;
int count2 = 0;
Iterator<Map.Entry<Integer, int[][]>> iterator = TopoStore.entrySet().iterator();
while (iterator.hasNext()){
int[][] value = iterator.next().getValue();
System.out.println(Arrays.deepToString(value));
System.out.println("========================================="); System.out.println("=========================================");
System.out.println(count2); System.out.println(count2);
while (iterator.hasNext()){
int[][] valueNext = iterator.next().getValue();
for (int i = 0;i<value.length;i++){
boolean equals = Arrays.equals(value[i], valueNext[i]);
count += (equals?1:0);
} }
if (count != 30){
System.out.println(Arrays.deepToString(valueNext));
System.out.println("=========================================");
System.out.println(count2);
count2++;
}
count=0;
value=valueNext;
}
}
System.out.println("所有topo完成");
return TopoStore; return TopoStore;
} }
} }
...@@ -7,9 +7,11 @@ import lombok.Data; ...@@ -7,9 +7,11 @@ import lombok.Data;
*/ */
@Data @Data
public class SimData { public class SimData {
//设置时间,默认为 2020-01-01 00-00-00
//24小时制
private String defaultDate = "2020-01-01 00-00-00";
//时间间隔,默认值为10 //时间间隔,默认值为10
private int jiange = 20; private int jiange = 10;
//周期值,默认值为100分钟,即为6000秒 //周期值,默认值为100分钟,即为6000秒
private int zhouqi = 6000; private int zhouqi = 6000;
//todo:这里因该预设默认值 //todo:这里因该预设默认值
...@@ -27,7 +29,7 @@ public class SimData { ...@@ -27,7 +29,7 @@ public class SimData {
private double lamda = 0.05; private double lamda = 0.05;
//星间信道容量最低容限 //星间信道容量最低容限
private double c0 = 4*10e7; private double c0 = 10e9;
public double ptGtGr(){ public double ptGtGr(){
return pt*gt*gr; return pt*gt*gr;
......
...@@ -22,7 +22,7 @@ public class WeiXingData { ...@@ -22,7 +22,7 @@ public class WeiXingData {
//卫星的序列号 //卫星的序列号
private Integer index; private Integer index;
//运行时间 //运行时间
private Integer lastime = 0; private int lastime = 0;
@Override @Override
public String toString(){ public String toString(){
......
...@@ -82,7 +82,7 @@ public class ToponetImpl implements Toponet { ...@@ -82,7 +82,7 @@ public class ToponetImpl implements Toponet {
double r = this.distance(a, b); double r = this.distance(a, b);
double channelCapacity; double channelCapacity;
channelCapacity = sd.getBandwidth()*Math.log(1+(sd.ptGtGr()/(Math.pow(4*Math.PI*r*sd.getJiange()/sd.getLamda(),2)*sd.n0B())))/Math.log(2); channelCapacity = sd.getBandwidth()*Math.log(1+(sd.ptGtGr()/(Math.pow(4*Math.PI*r/sd.getLamda(),2)*sd.n0B())))/Math.log(2);
return channelCapacity; return channelCapacity;
} }
......
package top.ninwoo.test.sateTopo.service.impl; package top.ninwoo.test.sateTopo.service.impl;
import top.ninwoo.test.sateTopo.entity.SimData;
import top.ninwoo.test.sateTopo.entity.WeiXingData; import top.ninwoo.test.sateTopo.entity.WeiXingData;
import top.ninwoo.test.sateTopo.service.Weixing; import top.ninwoo.test.sateTopo.service.Weixing;
...@@ -16,8 +15,6 @@ import java.util.Map; ...@@ -16,8 +15,6 @@ import java.util.Map;
public class WeixingImpl implements Weixing { public class WeixingImpl implements Weixing {
SimData simData = new SimData();
@Override @Override
public List<Map> parseTxt(File file) { public List<Map> parseTxt(File file) {
String str; String str;
...@@ -77,10 +74,11 @@ public class WeixingImpl implements Weixing { ...@@ -77,10 +74,11 @@ public class WeixingImpl implements Weixing {
} }
@Override @Override
public List<WeiXingData> addWSpeed(List<WeiXingData> wx, int zhouqi) { public List<WeiXingData> addWSpeed(List<WeiXingData> wx,int zhouqi) {
for(int i=0;i<wx.size();i++){ for(int i=0;i<wx.size();i++){
if(wx.get(i).getTag().equals(true)){ if(wx.get(i).getTag().equals(true)){
wx.get(i).setSpeed(2*Math.PI*(1/zhouqi));} Double speed = 2*Math.PI/zhouqi;
wx.get(i).setSpeed(speed);}
else{wx.get(i).setSpeed((-1)*2*Math.PI*(1/zhouqi));} else{wx.get(i).setSpeed((-1)*2*Math.PI*(1/zhouqi));}
} }
return wx; return wx;
...@@ -90,7 +88,7 @@ public class WeixingImpl implements Weixing { ...@@ -90,7 +88,7 @@ public class WeixingImpl implements Weixing {
public List<WeiXingData> addAxis(List<WeiXingData> wx) { public List<WeiXingData> addAxis(List<WeiXingData> wx) {
for (int i = 0; i < wx.size(); i++) { for (int i = 0; i < wx.size(); i++) {
Float High = wx.get(i).getHigh(); Float High = wx.get(i).getHigh();
Double hudu = Math.toRadians(wx.get(i).getSpeed() * wx.get(i).getLastime()); Double hudu = wx.get(i).getSpeed() * wx.get(i).getLastime();
Double Alpha = Math.toRadians(wx.get(i).getAlpha()); Double Alpha = Math.toRadians(wx.get(i).getAlpha());
Double Beta = Math.toRadians(wx.get(i).getBeta()); Double Beta = Math.toRadians(wx.get(i).getBeta());
Double Gamma = Math.toRadians(wx.get(i).getGamma()); Double Gamma = Math.toRadians(wx.get(i).getGamma());
...@@ -212,7 +210,7 @@ public class WeixingImpl implements Weixing { ...@@ -212,7 +210,7 @@ public class WeixingImpl implements Weixing {
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override @Override
public List<WeiXingData> iniTopo(File file, int zhouqi) throws IllegalAccessException { public List<WeiXingData> iniTopo(File file,int zhouqi) throws IllegalAccessException {
List<Map> maps = this.parseTxt(file); List<Map> maps = this.parseTxt(file);
List<WeiXingData> wxData = this.initNet(maps); List<WeiXingData> wxData = this.initNet(maps);
wxData = this.initChangeTopo(wxData,zhouqi); wxData = this.initChangeTopo(wxData,zhouqi);
...@@ -233,7 +231,7 @@ public class WeixingImpl implements Weixing { ...@@ -233,7 +231,7 @@ public class WeixingImpl implements Weixing {
} }
@Override @Override
public List<WeiXingData> initChangeTopo(List<WeiXingData> wxData, int zhouqi) { public List<WeiXingData> initChangeTopo(List<WeiXingData> wxData,int zhouqi) {
wxData = this.addWSpeed(wxData,zhouqi); wxData = this.addWSpeed(wxData,zhouqi);
wxData = this.addAxis(wxData); wxData = this.addAxis(wxData);
this.checkWX(wxData); this.checkWX(wxData);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment