c#绘制一个雷达缩放和定心问题
本文关键字:缩放 问题 雷达 一个 绘制 | 更新日期: 2023-09-27 18:16:05
我想在pictureBox上画一个雷达。画点不成问题,但我在基础数学方面很吃力。也许我太累了。
我有一个200x200的pictureBox。我已经在图片框(4x4)中加载了一个小的,居中的图像,它象征着当前的玩家。
我建立了一个函数叫做PaintRadar(int meX, int meY, int enemyX, int enemyY)
参数取值如下:meX = 27000, meY = 30000, enemyX = 26000, enemyY = 28000
期望的结果是让敌人围绕在我周围,我总是在pictureBox的中心。我需要计算什么来居中meX和meY在pictureBox中?
谢谢
假设玩家处于敌人中间,并根据他们的位置和玩家的位置之间的差异在中心周围绘制敌人。
把玩家当成原点。通过从敌人的位置中减去玩家的位置,你将敌人的位置置于一个以玩家为中心的坐标系统中。这就是你的雷达。
的例子:
// Get differences. d is short for difference (or delta :)).
int dy = enemyY - meY;
int dx = enemyX - meX;
// Then scale the dy and dx values so they fix in the picture box.
dy *= scaleY;
dx *= scaleX;
那么你就可以在图片框的(dx,dy)处画敌人。
比例应该是这样的公式:
scaleY = (1 / maxDetectionDistance) * (heightOfRadarBox / 2);
scaleX = (1 / maxDetectionDistance) * (widthOfRadarBox / 2);
任何超过你的雷达限制的东西都不应该画。
// Don't draw if enemy is too far away for radar to pick up.
if (Math.Abs(dy) > maxDetectionDistance || Math.Abs(dx) > maxDetectionDistance)
{
return;
}