8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

将提供的坐标缩放至给定图像

SKJ 2月前

39 0

我正在使用 Fortnite API(参见此处)并使用其地图位置端点,我可以检索包含名称和 XYZ 坐标的位置。该端点还提供地图,可返回...

我正在使用 Fortnite API( 参见此处 ),并使用其地图位置端点,我可以检索包含名称和 XYZ 坐标的位置。该端点还提供地图,返回地图的图像 URL()。

我尝试使用提供的坐标的地图图像在 XYZ 坐标处的地图位置上绘制一个 X。但是给出的坐标示例为:(-78214, -70796, 112)。由于它是 2D 图像,因此仅使用 X 和 Y,但这些 5 位负数对我处理的图像大小没有多大帮助。

因此,我联系了 Discord 中之前尝试过的人,他们最终给了我一个我尝试过的缩放数字。以下是代码:

var mapLocations = await fortniteApi.GetFortniteMapLocations();
if (mapLocations == null)
{
    return null;
}

// Download the image
Bitmap bitmap;
using (var httpClient = new HttpClient())
{
    await using (var stream = await httpClient.GetStreamAsync(mapLocations.Images.Blank.AbsoluteUri))
    {
        bitmap = new Bitmap(stream);
    }
}

const int worldRadius = 135000;

var stringOutput = "";
Color[] colors = [Color.Red, Color.Blue, Color.Black, Color.Yellow, Color.Purple];
foreach (var color in colors)
{
    var namedLocations = mapLocations.POIs.Where(l => !l.Id.ToLower().Contains("unnamed")).ToList();
    var randomIndex = new Random().Next(namedLocations.Count);
    var randomLocation = namedLocations[randomIndex];

    var x = (randomLocation.Location.Y + worldRadius) / (worldRadius * 2) * bitmap.Width;
    var y = (1 - (randomLocation.Location.X + worldRadius) / (worldRadius * 2)) * bitmap.Height;

    using (var graphics = Graphics.FromImage(bitmap))
    {
        const int xSize = 100;
        var pen = new Pen(color, 7);
        graphics.DrawLine(pen, x - xSize / 2f, y - xSize / 2f, x + xSize / 2f, y + xSize / 2f);
        graphics.DrawLine(pen, x - xSize / 2f, y + xSize / 2f, x + xSize / 2f, y - xSize / 2f);
    }

    stringOutput +=
        $"{randomLocation.Name} || {color.Name} || original: ({randomLocation.Location.X} , {randomLocation.Location.Y}) || scaled: ({x} , {y})\n";

}
// Save the modified image
const string outputPath = @"C:\temp\" + "output.jpg";
bitmap.Save(outputPath);
Console.WriteLine($"Image saved to {outputPath}");

总结一下,代码会随机选取 5 个位置,并为其分配颜色和标记 X。输出如下所示如代码所示,它使用了 135000 的缩放因子,这个值是任意的,但似乎已经非常接近了。以下是坐标与它们应该在的位置(大致)的比较:

BLACK:X: 449, 1077 应为: 489, 1184

紫色:X:893,1038 应为:929,1071

BLUE:X:1548, 1493 应为:1485, 1468

所以最终,我想知道,是否有一种数学方法可以计算此图像的正确比例因子,以及如何调整 API 提供的坐标以匹配 API 上的正确位置?我不确定是否需要更多数据,但我认为必须有一种数学方法来准确地做到这一点。

帖子版权声明 1、本帖标题:将提供的坐标缩放至给定图像
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由SKJ在本站《image》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 看起来你正在使用整数除法(这会截断结果),这可能是导致结果错误的原因。尝试使用

  • 我可以进一步阐述 - 但你需要先告诉我你对仿射变换和矩阵数学有多熟悉。(StackOverflow 评论不是从第一原理进行启迪的最佳场所......)

返回
作者最近主题: