Ios 如何计算两个不相似矩形之间的比例因子
希望有人能帮我:) 我正在尝试将一个点从地图(纬度、经度)缩放到图像(x、y)。 为此,我需要找到两个不相似的矩形之间的比例因子(我想) 我会澄清,比如说: 矩形1:A(40.0,50.0)B(40.0,56.0)C(43.0,56.0)D(43.0,50.0) (纬度增量=3,经度增量=6) 矩形2:E(0,0)F(500,0)G(500,300)H(0,300) (Xδ=500,Yδ=300) 如何将点p(41.5,52.5)从矩形1缩放到矩形2上的点(x,y) 更新: 总体思路: 我试图在自定义图像(不是地图图像,而是我自己的图形)上显示用户当前位置(Lat、Lon),因此我无法使用地图(MKMapKit、Google、Tom) 我有用户当前位置(通过CoreLocation)和图像(800x460) 我正在绘制的区域很小,所以我不需要担心地球的曲线 我试图找到一个公式,帮助我将我的用户(Lat,Lon)位置缩放到我的图像(在我的iPhone屏幕上)Ios 如何计算两个不相似矩形之间的比例因子,ios,image,map,scale,Ios,Image,Map,Scale,希望有人能帮我:) 我正在尝试将一个点从地图(纬度、经度)缩放到图像(x、y)。 为此,我需要找到两个不相似的矩形之间的比例因子(我想) 我会澄清,比如说: 矩形1:A(40.0,50.0)B(40.0,56.0)C(43.0,56.0)D(43.0,50.0) (纬度增量=3,经度增量=6) 矩形2:E(0,0)F(500,0)G(500,300)H(0,300) (Xδ=500,Yδ=300) 如何将点p(41.5,52.5)从矩形1缩放到矩形2上的点(x,y) 更新: 总体思路: 我试图在
谢谢 如果您对它引入的扭曲感到满意,您可以单独处理
x
(纬度
)和y
(经度
)坐标
如果你认为你不会对这种扭曲感到满意,那么你打算如何处理纬度和经度中的不公度尺度<代码>1°纬度!=1°长
,位于您问题中的纬度
如果您需要帮助从一个长度的行缩放到另一个长度的行,请更新您的问题
编辑OP评论后的内容
好的,那么你想把纬度3°的间隔映射到Y方向300像素的间隔,把经度6°的间隔映射到X方向500像素的间隔
我仍然不能完全确定你是否担心引入进一步的扭曲;如果你不是,那很容易。我假设屏幕区域的左下角是像素(1,1),这就是您要映射(40°、56°)的位置。对于该点以东的每一分钟经度,向右移动(500/360)
像素。在角点以北纬度的每一分钟,向上移动(300/180)
像素
这种粗糙的、现成的投影不会保留2D形状的外观(例如,一个正方形将投影为一个矩形),但有许多广泛使用的地图投影不会保留形状。好吧,获得与第一个矩形相似但适合第二个矩形并不难。以下是方法:
CGRect rect1, rect2; //your rectangles.
float scale = MIN(rect1.size.width / rect2.size.width , rect1.size.height / rect2.size.height);
CGRect resultedRect;
resultedRect.origin = rect2.origin;
resultedRect.size = CGSizeMake(rect2.size.width * scale, rect2.size.height * scale);
//resultedRect is similar with rect1 but fits in rect2. You can now multiply your point with "scale" and get the new position.
我不确定这是你想要达到的
问候,
乔治好吧,你需要找到从rect1到rect2的比例,然后用这个比例乘以你的点。由于矩形不相似,我认为您必须找到与矩形1相似的最大矩形,它将适合矩形2。希望这有帮助。干杯谢谢乔治!不过,我知道这样一个公式是存在的,我就是找不到/记不起来。看看我的答案,得到这个公式。嘿,乔治!谢谢你的代码!我试过了。不幸的是,正如我所怀疑的,我的图像变形,缩放点关闭:(我试图在自定义图像(不是地图图像,我自己的图形)上显示用户当前位置(Lat,Lon),因此无法使用地图(MKMapKit,Google,Tom Tom)。我有用户当前位置(通过CoreLocation)和图像(800x460)。我正在绘制的区域很小,所以我不需要担心地球的曲线。几天来,我一直在试图找到一个公式,帮助我将用户(纬度、经度)的位置缩放到我的图像(在iPhone屏幕上).ooh,好的,那么你应该首先得到图像区域角点的地图坐标。然后很容易得到该矩形内的位置。对不起,我不理解firstCool的目标:)顺便说一句,我有区域(Lat,Lon)的地图坐标(4个角点),以十进制值(不是度)表示。我只是让truble将一个随机(纬度,经度)点(x,y)转换(或显示)到我的图像中。有什么想法吗?谢谢我认为与我的答案中的想法相同。rect1应该是坐标的矩形(图像的纬度、经度,以及适当的宽度和高度,表示纬度点的宽度和经度点的高度),rect2应该类似于CGRectMake(0,0,yourImageWidth,yourImageHeight)
。此外,该点应表示用户在rect1中的位置。所以做一些类似于point.x-=rect1.origin.x代码>和点.y-=rect1.origin.y代码>首先,然后做我在答案中写的事情。我认为这只是一个好的初始值的问题。有一件事…你可以用这个:-(CGRect)convertRegion:(MKCoordinateRegion)region to recttoview:(UIView*)view
。还要确保考虑视网膜显示*例如,将给定矩形的原点和大小乘以[UIScreen Main Screen]。缩放谢谢您的回答!我已经按照你的要求更新了我的问题:)我想得对吗?这是正确的方法吗?哦…对不起,我指的是十进制的纬度和经度,而不是度。我非常担心扭曲,不能允许任何扭曲。出于某种原因,我认为这只是一个公式的问题……我猜我错了:)谢谢你的时间!