C#绘制雷达缩放和居中问题

时间:2015-10-04 00:42:39

标签: c# math coordinates

我想在pictureBox上画一个雷达。绘图点没问题,但我正在努力学习基础数学。也许我太累了。

我有一个200x200的pictureBox。我在图片框(4x4)中加载了一个小的居中图像,象征着当前的播放器。

我已经构建了一个名为

的函数
  

PaintRadar(int meX,int meY,int enemyX,int enemyY)

参数可以具有以下值:meX = 27000,meY = 30000,enemyX = 26000,enemyY = 28000

期望的结果是让我周围的敌人和我总是在pictureBox中居中。我需要计算什么才能在pictureBox中居中meX和meY?

由于

1 个答案:

答案 0 :(得分:1)

假设玩家位于敌人的中间,并根据他们的位置和玩家位置之间的差异在中心周围绘制敌人。

想想它就像玩家是原点一样。通过从敌人的位置减去玩家的位置,你将敌人的位置放在一个坐标系中,玩家位于中心位置。这基本上就是你的雷达。

示例:

// 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;
}