如何计算 IIIF 旋转图像的高度和宽度
How to calculate the height and width of a IIIF rotated image
我想使用 IIIF 中可用的图像旋转功能,将历史航拍照片叠加到地图上。我面临的问题是,使用 http://jsfiddle.net/jamesinealing/tr7obasm/ 中的代码,我需要在将图像放置在地图上之前手动计算 NW 和 SE 点,这些点会根据旋转而改变。
我想要做的是计算新旋转图像(边界框,如果你喜欢的话)的像素尺寸,然后使用它们至少得到 lat lng 坐标的近似值,我可以然后调整。
我的计算测试代码在http://jsfiddle.net/jamesinealing/ehp65gy1/ (based on )
var rotation=30;
var angle=rotation;
// var angle=((360-rotation) % 180);
var imgWidth=300;
var imgHeight=224;
w = Math.sin(angle * Math.PI/180) * imgHeight + Math.cos(angle * Math.PI/180) * imgWidth;
h = Math.sin(angle * Math.PI/180) * imgWidth + Math.cos(angle * Math.PI/180) * imgHeight;
问题是它只能工作到 90 度角,而 IIIF 旋转是 0-359 的任意值。我明白任何 180 或以上的值都会产生相同的结果,所以无论如何都需要某种模数,但我无法理解为什么它不能超过 90 度!
新框的尺寸仅根据 angle % 90
变化,即在椭圆上介于 300*224 和 224*300 之间,因此您可以使用 Math.abs
调整角度和一些if
条语句来确定应该绕哪条路。
我想使用 IIIF 中可用的图像旋转功能,将历史航拍照片叠加到地图上。我面临的问题是,使用 http://jsfiddle.net/jamesinealing/tr7obasm/ 中的代码,我需要在将图像放置在地图上之前手动计算 NW 和 SE 点,这些点会根据旋转而改变。
我想要做的是计算新旋转图像(边界框,如果你喜欢的话)的像素尺寸,然后使用它们至少得到 lat lng 坐标的近似值,我可以然后调整。
我的计算测试代码在http://jsfiddle.net/jamesinealing/ehp65gy1/ (based on )
var rotation=30;
var angle=rotation;
// var angle=((360-rotation) % 180);
var imgWidth=300;
var imgHeight=224;
w = Math.sin(angle * Math.PI/180) * imgHeight + Math.cos(angle * Math.PI/180) * imgWidth;
h = Math.sin(angle * Math.PI/180) * imgWidth + Math.cos(angle * Math.PI/180) * imgHeight;
问题是它只能工作到 90 度角,而 IIIF 旋转是 0-359 的任意值。我明白任何 180 或以上的值都会产生相同的结果,所以无论如何都需要某种模数,但我无法理解为什么它不能超过 90 度!
新框的尺寸仅根据 angle % 90
变化,即在椭圆上介于 300*224 和 224*300 之间,因此您可以使用 Math.abs
调整角度和一些if
条语句来确定应该绕哪条路。