2012-10-24 40 views
1

希望有人能幫助我:)如何2不相似的矩形之間計算比例因子

我試圖從地圖(經緯度)點擴展到的圖像(X,Y)。 爲此,我需要找到2個非相似矩形之間的比例因子(我認爲)。

我將澄清,讓我們說:

矩形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)。

我該如何縮放矩形2上的矩形1到點(x,y)的點P(41.5,52.5)?

UPDATE:

總體思路:

我想自定義圖像上顯示用戶的當前位置(緯度,經度)(不是地圖圖像,我自己的一個圖)因此我不能使用地圖(MKMapKit,谷歌,湯姆湯姆)。

我有用戶當前位置(通過CoreLocation)和圖像(800x460)。

我正在繪製的區域很小,所以我不需要擔心地球的曲線。

我試圖找到一個公式,會幫我擴大我的用戶(緯度,經度)位置到我的形象(我的iPhone屏幕上)

謝謝!

+0

那麼,你需要找到Rect1的規模,RECT2,然後與規模乘以你的觀點。由於矩形不相似,我想你將不得不找到與rect1相似的最大的矩形,它將適用於rect2。希望這可以幫助。乾杯! – George

+0

謝謝喬治! 不過,我知道這樣的公式存在, 我只是無法找到/記住它。 –

+0

查看我的答案獲取公式。 – George

回答

1

那麼,獲得與第一個相似但適合第二個的矩形並不難。這是如何:

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. 

我不知道這是你想要實現的。

問候,

喬治

+0

嘿,喬治! 感謝您的代碼!我試過了。 不幸的是,因爲我懷疑, 我的形象變形和縮放點關:(: 我試圖顯示用戶當前位置(緯度,經度)在自定義圖像(不是地圖圖像,我的繪圖自己)因此不能使用地圖(MKMapKit,谷歌,湯姆湯姆) 我已經有用戶當前位置(通過CoreLocation)和一個圖像(800x460)。不需要擔心地球的曲線 現在我試圖找到一個公式,它可以幫助我將我的用戶(Lat,Lon)位置放大到我的圖像中(在我的iPhone屏幕上) –

+0

Ooooh,ok ,那麼你應該首先獲得圖像區域角點的地圖座標,然後在該矩形內部獲取位置將變得很簡單。對不起,我首先不瞭解目標 – George

+0

很酷:)順便說一句,我有十進制值(不是度數)的區域(Lat,Lon)的地圖座標(4角)。 我只是將一個隨機(Lat,Lon)點(x,y)「翻譯」(或顯示)到我的圖像中(或在其中)。 有什麼想法?謝謝! –

1

如果您對它引入的扭曲感到滿意,您可以分別處理xlatitude)和ylongitude)座標。

如果您認爲自己不會對這種扭曲感到滿意,那麼您打算如何處理latitudelongitude中的不適應比例?在您的問題緯度1°lat != 1°long

如果您需要幫助從一個長度的行縮放到另一個長度的行,請更新您的問題。

編輯下面的評論由OP。好吧,所以你想映射一個緯度3°的間隔到Y中的300個像素(我猜)的間隔,以及X中500個像素間隔的經度6°間隔。

我仍然不完全確定您是否擔心引入進一步的扭曲;如果你不是這很容易。我會假設屏幕區域的左下角是像素(1,1),這是您想要映射(40°,56°)到的位置。對於該點以東的每分鐘經度,將(500/360)像素向右移動。在角落以北的每分鐘北緯,向上移動(300/180)像素。

這種粗糙和準備好的投影不會保留二維形狀的外觀(例如,一個正方形將投影到一個矩形),但有許多地圖投影廣泛使用,不保留形狀。

+0

感謝您的回答! 我按照你的要求更新了我的問題:) 我在想什麼嗎?這是正確的方式嗎? –

+0

哦...對不起,但我的意思是緯度和經度的十進制值,而不是度數。我非常擔心扭曲,不能允許任何。 由於某種原因,我認爲這是一個單一的公式的問題...猜我錯了:)謝謝你的時間! –

相關問題