我有两个整数值需要转换为屏幕坐标(双精度浮点数)的两个方向。将分数值(-50到50)转换为屏幕坐标(如下面的示例代码所示,一个屏幕300 x 300点/像素),同时也需要进行屏幕到分数值的转换。我已经画了一个视觉示例:
我还创建了一个小型控制台应用程序来测试计算,但显然目前完全不起作用,我真的很难处理数学问题。
class Program
{
public static void Main(string[] args)
{
double screenWidth = 300;
double screenHeight = 300;
double MaxX = 50;
double MinX = -50;
double MaxY = 50;
double MinY = -50;
// x = 150
// y = 150
// given these inputs
CalcScoreToScreen(screenWidth, screenHeight, 0, 0);
// x = 300
// y = 0
// given these inputs
CalcScoreToScreen(screenWidth, screenHeight, 50, 0);
// x = 225
// y = 225
// given these inputs
CalcScoreToScreen(screenWidth, screenHeight, 25, -25);
// x = 75
// y = 75
// given these inputs
CalcScoreToScreen(screenWidth, screenHeight, -25, 25);
// x = -25
// y = 25
// given these inputs
CalcScreenToScore(screenWidth, screenHeight, 75, 75);
// x = 25
// y = -25
// given these inputs
CalcScreenToScore(screenWidth, screenHeight, 225, 225);
Console.ReadLine();
}
private static void CalcScoreToScreen(double screenWidth, double screenHeight, int scoreX, int scoreY)
{
var screenX = scoreX + screenWidth / 2;
var screenY = scoreY + screenHeight / 2;
Console.WriteLine("Screen X: {0} - Score: {1}", screenX, scoreX);
Console.WriteLine("Screen Y: {0} - Score: {1}", screenY, scoreY);
}
private static void CalcScreenToScore(double screenWidth, double screenHeight, double screenX, double screenY)
{
int scoreX = Convert.ToInt32(screenX + screenWidth / 2);
int scoreY = Convert.ToInt32(screenY + screenHeight / 2);
Console.WriteLine("Score X: {0} - Screen X: {1}", scoreX, screenX);
Console.WriteLine("Score Y: {0} - Screen Y: {1}", scoreY, screenY);
}
}