java雷达_JAVA之坦克大战系列9-高效雷达(上)

前言

本篇之前的内容介绍了瞄准策略,让大家明白了如何能让我们的雷达更好的锁定到敌人,本篇将分享给大家一个非常高效的雷达,供大家参考。

主要内容复习

第一, heading 角度系

cf08aade777e8a7f710a8fe2ef896fac.png

如图所示,所谓heading角,即从Y轴出发,然后顺时针绕回Y轴的这么个角度区间,取值范围: [0,360]

第二, bearing角度系

13ffa738213ade2298e80acf1d947c90.png

所谓bearing 角,即从Y轴顺、逆时针出发,绕半圈回到Y轴所形成的两个角度区间,取值范围:顺时针[0,180) ;逆时针[0,-180]

好的,我们已近复习了两角度系,下面我们来学习这个非常高效的雷达

public void onScannedRobot(ScannedRobotEvent e) {

//注意 这里的计算都以弧度为单位

double absBearing=0d;

//雷达转动角度

double radarTurnAngle=0d;

//得到绝对角度差

absBearing=robocode.util.Utils.normalRelativeAngle(e.getBearingRadians()+getHeadingRadians());

//根据absBearing角算出Radar要调整的角度

radarTurnAngle=Math.sin(absBearing - getRadarHeadingRadians());

//转动雷达,注意是向右

setTurnRadarRightRadians(radarTurnAngle);

}

分析:

9dfa980ee52005549897f0a2747b896e.png

说明:

e.getBearingRadians(),如图中的∠FBC所示

是敌机(Enemy)与自己车头方向(你使用setAhead(正值)前进的方向即为车头方向,如BC箭头所示)所成的角,因为是以BC为Y轴的bearing角,所以这个角在这个例子中是个负值。

getHeadingRadians(),如图中∠ABC所示

是以自己的车头方向与屏幕垂直正上方为Y轴所成的heaing角。

absBearing=robocode.util.Utils.normalRelativeAngle(e.getBearingRadians()+getHeadingRadians());

所以absBearing角即为∠FBA,即自己与敌机的连线,与Y轴所成的bearing角,取值范围为[-180,180)。

∠FBE=absBearing - getRadarHeadingRadians(),在这里计算出来为负值。即雷达需要转动的角度。

最后通过Math.sin(absBearing - getRadarHeadingRadians())进行角度修正得到最终值radarTurnAngle。

因为setTurnRadarRightRadians(radarTurnAngle)是向右旋转,所以若radarTurnAngle为负则雷达向左旋转。

下一期将会给大家带来一个具体的实例供大家参考。

好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中创建Excel雷达图,您可以使用Apache POI库。以下是一个简单的示例代码: ```java import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; public class RadarChartExample { public static void main(String[] args) throws Exception { // 创建工作簿和工作表 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Radar Chart Example"); // 创建数据 Object[][] data = { {"Category", "Value 1", "Value 2", "Value 3", "Value 4", "Value 5"}, {"Data Set 1", 90, 80, 70, 60, 50}, {"Data Set 2", 60, 70, 80, 90, 100} }; // 创建雷达图 XSSFChart chart = RadarChart.createRadarChart(workbook, sheet, data, "Radar Chart", "Category", true); // 将图表插入工作表 int chartStartRow = 0; int chartStartColumn = 0; int chartEndRow = 15; int chartEndColumn = 7; chart.setTopLeftPosition(new CellAddress(chartStartRow, chartStartColumn)); chart.setBottomRightPosition(new CellAddress(chartEndRow, chartEndColumn)); // 保存Excel文件 FileOutputStream fileOut = new FileOutputStream("RadarChartExample.xlsx"); workbook.write(fileOut); fileOut.close(); workbook.close(); } } ``` 其中,`RadarChart`是一个自定义类,用于创建雷达图。以下是该类的代码: ```java import java.util.Arrays; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xddf.usermodel.*; import org.apache.poi.xssf.usermodel.*; public class RadarChart { public static XSSFChart createRadarChart(XSSFWorkbook workbook, XSSFSheet sheet, Object[][] data, String title, String categoryAxisLabel, boolean legend) { // 创建图表 XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 20); XSSFChart chart = drawing.createChart(anchor); // 设置图表标题 chart.setTitleText(title); chart.setTitleOverlay(false); // 创建轴 XDDFCategoryAxis categoryAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); categoryAxis.setTitle(categoryAxisLabel); XDDFValueAxis valueAxis = chart.createValueAxis(AxisPosition.LEFT); valueAxis.setTitle("Value"); // 创建数据系列 int numCategories = data.length - 1; int numValues = data[0].length - 1; XDDFChartData dataSeries = chart.createData(ChartTypes.RADAR, categoryAxis, valueAxis); for (int i = 1; i <= numValues; i++) { XDDFChartData.Series series = dataSeries.addSeries(categoryAxis.getCellReference(1, i), valueAxis.getCellReference(1, i)); XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromArray(Arrays.copyOfRange(data, 1, data.length), i, i); series.setValues(values); series.setTitle(data[0][i].toString(), null); } // 隐藏图例 if (!legend) { chart.getOrAddLegend().setPosition(LegendPosition.NONE); } return chart; } } ``` 运行该代码,将会在当前目录下创建一个名为`RadarChartExample.xlsx`的Excel文件,其中包含一个雷达图。您可以根据需要调整数据和图表属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值