gaodd 2 years ago
parent
commit
1467a38c0a

+ 79 - 11
src/main/java/com/szls/nstths/service/impl/Algorithm.java

@@ -9,6 +9,11 @@ import java.util.List;
9
 public class Algorithm {
9
 public class Algorithm {
10
 
10
 
11
 
11
 
12
+	/**
13
+	 * 定义常量  减速机传动比
14
+	 */
15
+	public static int basicData = 50;
16
+	
12
     /**
17
     /**
13
      * 打点要发送的角度
18
      * 打点要发送的角度
14
      *
19
      *
@@ -83,9 +88,9 @@ public class Algorithm {
83
 
88
 
84
                 }
89
                 }
85
 
90
 
86
-                sb.append(Math.round(vertical_angle) * 51);
91
+                sb.append(Math.round(vertical_angle) * basicData);
87
                 sb.append(",");
92
                 sb.append(",");
88
-                sb.append(Math.round(level_angle) * 51);
93
+                sb.append(Math.round(level_angle) * basicData);
89
                 sb.append(";");
94
                 sb.append(";");
90
 
95
 
91
                 // sb.append("\n");
96
                 // sb.append("\n");
@@ -98,9 +103,9 @@ public class Algorithm {
98
         AB = diameter / 2;//垂直三角形的底边
103
         AB = diameter / 2;//垂直三角形的底边
99
         BC = Math.sqrt(AB * AB + high * high);//垂直三角形的斜边
104
         BC = Math.sqrt(AB * AB + high * high);//垂直三角形的斜边
100
         vertical_angle = Math.toDegrees(Math.acos(high / BC));
105
         vertical_angle = Math.toDegrees(Math.acos(high / BC));
101
-        sb.append(Math.round(vertical_angle) * 51);
106
+        sb.append(Math.round(vertical_angle) * basicData);
102
         sb.append(",");
107
         sb.append(",");
103
-        sb.append(90*51);
108
+        sb.append(90 * basicData);
104
         //System.out.println(sb);
109
         //System.out.println(sb);
105
         return sb.toString();
110
         return sb.toString();
106
 
111
 
@@ -127,17 +132,17 @@ public class Algorithm {
127
         double verticalAngle = 0;//垂直角度
132
         double verticalAngle = 0;//垂直角度
128
         double levelAngle = 0;//水平角度
133
         double levelAngle = 0;//水平角度
129
         double realHypotenuse = 0;//返回的距离
134
         double realHypotenuse = 0;//返回的距离
130
-        BigDecimal baseNumber = new BigDecimal(51);
135
+        BigDecimal baseNumber = new BigDecimal(basicData);
131
 
136
 
132
         //  "18,7,17.88 - 19,6,28.88 - 17,4,39.88"  垂直角度,水平角度,返回距离 -
137
         //  "18,7,17.88 - 19,6,28.88 - 17,4,39.88"  垂直角度,水平角度,返回距离 -
133
         String[] split = rotationxy.split(";");
138
         String[] split = rotationxy.split(";");
134
         for (int i = 0; i < split.length; i++) {
139
         for (int i = 0; i < split.length; i++) {
135
-        	//System.out.println("split[i]是:"+split[i]);
140
+            //System.out.println("split[i]是:"+split[i]);
136
             String[] split1 = split[i].split(",");
141
             String[] split1 = split[i].split(",");
137
-            verticalAngle = new BigDecimal(split1[0]).divide(baseNumber,0,RoundingMode.HALF_UP).doubleValue();
138
-            levelAngle = new BigDecimal(split1[1]).divide(baseNumber,0,RoundingMode.HALF_UP).doubleValue();
139
-            realHypotenuse = new BigDecimal(split1[2]).divide(new BigDecimal(1000),2,RoundingMode.HALF_UP).doubleValue(); //单位转化为米
140
-            
142
+            verticalAngle = new BigDecimal(split1[0]).divide(baseNumber, 0, RoundingMode.HALF_UP).doubleValue();
143
+            levelAngle = new BigDecimal(split1[1]).divide(baseNumber, 0, RoundingMode.HALF_UP).doubleValue();
144
+            realHypotenuse = new BigDecimal(split1[2]).divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP).doubleValue(); //单位转化为米
145
+
141
             //将垂直的角度转化为弧度
146
             //将垂直的角度转化为弧度
142
             double verticalAngleRadians = Math.toRadians(verticalAngle);
147
             double verticalAngleRadians = Math.toRadians(verticalAngle);
143
             String verticalAngleS = String.format("%.2f%n", Math.sin(verticalAngleRadians));
148
             String verticalAngleS = String.format("%.2f%n", Math.sin(verticalAngleRadians));
@@ -167,7 +172,7 @@ public class Algorithm {
167
 
172
 
168
             }
173
             }
169
         }
174
         }
170
-         zHigh = Collections.min(zList);
175
+        zHigh = Collections.min(zList);
171
         return zHigh;
176
         return zHigh;
172
 		
177
 		
173
 		
178
 		
@@ -258,6 +263,69 @@ public class Algorithm {
258
     }
263
     }
259
 
264
 
260
 
265
 
266
+    /**
267
+     * 有效的z的集合
268
+     */
269
+    public static List<Double> getValidZ(String rotationxy, double diameter, double high){
270
+    	List<Double> zList  = new ArrayList<Double>();
271
+    	
272
+        double AC = high;
273
+        //double B1C = 0;//设备和粮面点之间的距离
274
+        double A1B1 = 0;//粮面的点到设备的水平距离
275
+        double z = 0; //实际点的坐标的z轴
276
+        double verticalAngle = 0;//垂直角度
277
+        double levelAngle = 0;//水平角度
278
+        double realHypotenuse = 0;//返回的距离即设备和粮面间两点的距离
279
+        BigDecimal baseNumber = new BigDecimal(basicData);
280
+
281
+        //  "18,7,17.88 ; 19,6,28.88 ; 17,4,39.88"  垂直角度,水平角度,返回距离 ;
282
+        String[] split = rotationxy.split(";");
283
+        for (int i = 0; i < split.length; i++) {
284
+            //System.out.println("split[i]是:"+split[i]);
285
+            String[] split1 = split[i].split(",");
286
+            verticalAngle = new BigDecimal(split1[0]).divide(baseNumber, 0, RoundingMode.HALF_UP).doubleValue();
287
+            levelAngle = new BigDecimal(split1[1]).divide(baseNumber, 0, RoundingMode.HALF_UP).doubleValue();
288
+            realHypotenuse = new BigDecimal(split1[2]).divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP).doubleValue(); //单位转化为米
289
+
290
+            //将垂直的角度转化为弧度
291
+            double verticalAngleRadians = Math.toRadians(verticalAngle);
292
+            //垂直角度的sin
293
+            String verticalAngleS = String.format("%.2f%n", Math.sin(verticalAngleRadians));
294
+            double sinVerticalAngle = new Double(verticalAngleS);
295
+            //垂直角度的cos
296
+            String verticalAngleC = String.format("%.2f%n", Math.cos(verticalAngleRadians));
297
+            double cosVerticalAngle = new Double(verticalAngleC);
298
+            
299
+            //竖直三角形的底边 即 平面三角形的斜边  sinVerticalAngle有可能是负值 
300
+            A1B1 = realHypotenuse * sinVerticalAngle; 
301
+
302
+            //将水平的角度转化为弧度
303
+            double levelAngleRadians = Math.toRadians(levelAngle);
304
+            //水平角度的sin
305
+            String sinLevel = String.format("%.2f%n", Math.sin(levelAngleRadians));
306
+            double sinLeveld = new Double(sinLevel);
307
+            //水平角度的cos
308
+            /*String cosLevel = String.format("%.2f%n", Math.cos(levelAngleRadians));
309
+            double cosLeveld = new Double(cosLevel);*/
310
+
311
+            /*
312
+             * 对比实际的A1B1与打到墙上时最大的这个边进行比较 如果A1B1小于这个最大边则可取
313
+             * 如果A1B1大于或等于这个最大的边 则打到了墙上 舍去
314
+             * */
315
+            //打到墙上 最大的边
316
+            double maxLength = sinLeveld * diameter;
317
+
318
+            if (Math.abs(A1B1)< Math.abs(maxLength)) {
319
+                //实际打在粮面上的点的坐标(此时是以设备为坐标系的原点 分为上下两部分)
320
+                double A1C = realHypotenuse * cosVerticalAngle;
321
+                z = AC - A1C;
322
+                zList.add(z);
323
+            }
324
+        }
325
+        return zList;
326
+    
327
+    }
328
+    
261
     public static void main(String[] args) {
329
     public static void main(String[] args) {
262
 
330
 
263
        /* BigDecimal bdv = BigDecimal.valueOf(12.125323);
331
        /* BigDecimal bdv = BigDecimal.valueOf(12.125323);

+ 18 - 12
src/main/java/com/szls/nstths/service/impl/TeDataServiceImpl.java

@@ -1,7 +1,6 @@
1
 package com.szls.nstths.service.impl;
1
 package com.szls.nstths.service.impl;
2
 
2
 
3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
-import com.szls.nstths.controller.DataController;
5
 import com.szls.nstths.entity.ReMsg;
4
 import com.szls.nstths.entity.ReMsg;
6
 import com.szls.nstths.entity.STask;
5
 import com.szls.nstths.entity.STask;
7
 import com.szls.nstths.entity.TeData;
6
 import com.szls.nstths.entity.TeData;
@@ -9,6 +8,7 @@ import com.szls.nstths.mapper.ReMsgMapper;
9
 import com.szls.nstths.mapper.STaskMapper;
8
 import com.szls.nstths.mapper.STaskMapper;
10
 import com.szls.nstths.mapper.TeDataMapper;
9
 import com.szls.nstths.mapper.TeDataMapper;
11
 import com.szls.nstths.service.TeDataService;
10
 import com.szls.nstths.service.TeDataService;
11
+
12
 import org.slf4j.Logger;
12
 import org.slf4j.Logger;
13
 import org.slf4j.LoggerFactory;
13
 import org.slf4j.LoggerFactory;
14
 import org.springframework.beans.factory.annotation.Autowired;
14
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +16,6 @@ import org.springframework.scheduling.annotation.Async;
16
 import org.springframework.stereotype.Service;
16
 import org.springframework.stereotype.Service;
17
 import org.springframework.web.client.RestTemplate;
17
 import org.springframework.web.client.RestTemplate;
18
 
18
 
19
-import java.beans.Transient;
20
 import java.util.ArrayList;
19
 import java.util.ArrayList;
21
 import java.util.Date;
20
 import java.util.Date;
22
 import java.util.List;
21
 import java.util.List;
@@ -113,7 +112,8 @@ public class TeDataServiceImpl implements TeDataService {
113
             String rotationxy = Algorithm.getAveragePosition(diameter, zHeight);
112
             String rotationxy = Algorithm.getAveragePosition(diameter, zHeight);
114
             teData.setRotationxy(rotationxy);
113
             teData.setRotationxy(rotationxy);
115
             teData.setStime(new Date());//第二次开始的时间
114
             teData.setStime(new Date());//第二次开始的时间
116
-            //postHelper(teData);
115
+            
116
+            postHelper(teData);
117
 
117
 
118
             flag = false;
118
             flag = false;
119
         } else { //打点两次完毕 计算体积
119
         } else { //打点两次完毕 计算体积
@@ -154,23 +154,29 @@ public class TeDataServiceImpl implements TeDataService {
154
     @Override
154
     @Override
155
     public void calculateVolume(String taskID) {
155
     public void calculateVolume(String taskID) {
156
         // TODO Auto-generated method stub
156
         // TODO Auto-generated method stub
157
+    	StringBuffer sb = new StringBuffer();
158
+    	
157
         List<Double> zList = new ArrayList<Double>();
159
         List<Double> zList = new ArrayList<Double>();
158
-        String[] split = null;
159
-
160
+        double v = 0;
160
         QueryWrapper<TeData> queryWrapper = new QueryWrapper<>();
161
         QueryWrapper<TeData> queryWrapper = new QueryWrapper<>();
161
 
162
 
162
         List<TeData> teDataList = null;
163
         List<TeData> teDataList = null;
163
         queryWrapper.eq("taskID", taskID);
164
         queryWrapper.eq("taskID", taskID);
164
         teDataList = teDataMapper.selectList(queryWrapper);
165
         teDataList = teDataMapper.selectList(queryWrapper);
165
-        for (TeData teData : teDataList) {
166
-            split = teData.getRotationxy().split(";");
167
-            for (int i = 0; i < split.length; i++) {
168
-                String[] split1 = split[i].split(",");
169
-                //split1[2]  是返回的距离
170
-                //zList.add(Double.parseDouble(split1[2]) / 1000); //距离转化为米
166
+        
167
+        if(teDataList.size()>0){
168
+        	for (TeData teData : teDataList) {
169
+        		sb.append(teData.getRotationxy()+";");
171
             }
170
             }
171
+        	String rotationxy = sb.substring(0, sb.length()-1).toString();//发送的角度和返回的距离  150,50,90;200,-100,90;50,-50,90
172
+    		
173
+    		//获取有效的z值
174
+        	 zList = Algorithm.getValidZ(rotationxy, diameter, high);
175
+            
176
+    		//计算体积
177
+            v = Algorithm.calculateVolume(zList, diameter, h1, h2); //体积
172
         }
178
         }
173
-        //double v = Algorithm.calculateVolume(zList, diameter, h1, h2); //体积
179
+        logger.info("体积是: {}",v);
174
 
180
 
175
     }
181
     }
176
 
182