2012-05-26 24 views
2

我試圖計算導致相同單元數的網格大小(x乘以y)的所有可能值,例如2x2網格的單元大小爲4我想在y爲一半的x的,並且總是,例如4000。所以我想我想R鍵計算所有可能的正整數x和y的其中R計算兩個變量的可能值

function (total) { 
x*y=total 
x/y=2 
x!=total 
y!= total. 
} 

我想值獲得正整數並考慮不同解決方案的一種方法是讓總數比原始數值高10%(但不能小,我需要網格至少與我給出的總數一樣大) ,在這種情況下,函數可能有兩個字段,tot(例如4000)和容差(例如10%)。總數(如上圖所示)必須在tot和(tot + tolerance * tot)之間

我有幾個單元大小,所以4000只是一個例子。我試圖構建一個快速函數,它只返回正整數,並返回一個X和Y的矩陣。

任何想法?

非常感謝

+0

您的問題類似於http://stackoverflow.com/questions/10643129/split-screen-based-on-number-of-items屏幕比例。如果你只是想要一個網格,那麼flodel已經給出了很好的答案。如果你想創建一個適合特定視口的網格(比如特定的窗口大小),請檢查我對所引用問題的回答。 –

回答

2

這個什麼:

possible.sizes <- function(total, tolerance) { 

    min.total <- total 
    max.total <- total * (1 + tolerance) 

    min.y <- ceiling(sqrt(min.total/2)) 
    max.y <- floor(sqrt(max.total/2)) 

    if (max.y < min.y) 
     return(data.frame(x=numeric(0), y=numeric(0))) 

    y <- seq(min.y, max.y) 
    x <- 2*y 

    return(data.frame(x=x, y=y)) 
} 

possible.sizes(4000, 0.1) 
# x y 
# 1 90 45 
# 2 92 46 
+0

這太好了。謝謝你flodel。 –