素直に求めると、縦に表示したときの面積が、横に表示したときの面積がとなるのでこれを比較すれば良いです。
より、計算結果はC++、Java、C#のdouble
、Goのfloat64
などを用いれば比較結果に影響が出るほどの誤差を出さずに計算出来ます。
以下、面積を求めずに答えを求める方法を述べます。
の場合、どちらの向きでもとで小さい方の辺がディスプレイの一辺に接するため、画像の比率は変化しないことからSame
が答えです。
同様に、の場合、どちらの向きでもとで大きい方の辺が画像の一辺に接するため、画像の比率は変化しないことからSame
が答えです。
ここからはかつ、特に、のときに関して述べます。
縦に表示したときに画像の縦、横それぞれがディスプレイの一辺と接している場合を考えます。
画像の縦の辺がディスプレイに接している場合、画像の横の辺はであるため画像の縦の辺は元の大きさの倍になります。
したがって、面積はとなります。
一方、画像の横の辺がディスプレイに接している場合、画像の縦の辺はであるため画像の横の辺は元の大きさの倍になります。
したがって、面積はとなります。
そして、この画像を横に表示した時を考えると、から、上記のどちらであっても画像の横の辺がディスプレイの縦の辺に接することがわかります。
背理法による証明
画像の縦の辺がディスプレイの横の辺に接したとする。 すると、画像の横の辺はまで拡大されているため、画像の縦の辺は倍になる。 したがって、拡大後の画像は縦、横になる。 ここで、よりであることを考えると、である。 これは、画像がディスプレイよりも大きく表示されていることになるため、矛盾する。 よって、画像の横の辺がディスプレイの縦の辺に接している。
したがって、同様に求めると、横に表示したときの画像の面積はとなります。
比較をしてみましょう。
とを比較すると、よりの方が大きいです。
同様に、とを比較すると、より、の方が大きいです。
これより、、ならば縦に表示したときの方がより面積が大きく表示されるので、Vertical
が答えとなります。
以上より、、または、ならば、画像を90度回転させれば同じ話になるのでHorizontal
、
、ならばスマートフォンと画像を共に90度回転させれば同様に考えられるので、Vertical
が答えとなります。
xxxxxxxxxx
int main(){
int H,W,h,w;
std::cin >> H >> W >> h >> w;
if(H==W || h==w){
std::cout << "Same" << std::endl;
}
else if( ( H>W && h>w ) || ( H<W && h<w ) ){
std::cout << "Vertical" << std::endl;
}
else{
std::cout << "Horizontal" << std::endl;
}
}
xxxxxxxxxx
H,W = map(int,input().split())
h,w = map(int,input().split())
if H==W or h==w:
print("Same")
elif (H>W and h>w) or (H<W and h<w):
print("Vertical")
else:
print("Horizontal")
xxxxxxxxxx
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int W = sc.nextInt();
int h = sc.nextInt();
int w = sc.nextInt();
if(H==W || h==w){
System.out.println("Same");
}
else if(( H>W && h>w ) || ( H<W && h<w )){
System.out.println("Vertical");
}
else{
System.out.println("Horizontal");
}
}
}
xxxxxxxxxx
package main
import "fmt"
func main(){
var H,W,h,w int
fmt.Scan(&H,&W,&h,&w)
if H==W||h==w{
fmt.Println("Same")
} else if (H>W && h>w) || (H<W && h<w){
fmt.Println("Vertical")
} else{
fmt.Println("Horizontal");
}
}
xxxxxxxxxx
using System;
class Program{
static void Main(){
String[] args = Console.ReadLine().Split(" ");
int H = Int32.Parse(args[0]);
int W = Int32.Parse(args[1]);
args = Console.ReadLine().Split(" ");
int h = Int32.Parse(args[0]);
int w = Int32.Parse(args[1]);
if(H==W || h==w){
Console.WriteLine("Same");
}
else if(( H>W && h>w ) || ( H<W && h<w )){
Console.WriteLine("Vertical");
}
else{
Console.WriteLine("Horizontal");
}
}
}
xxxxxxxxxx
fun main(){
val (H,W) = readLine()!!.split(" ").map { it.toInt() }
val (h,w) = readLine()!!.split(" ").map { it.toInt() }
if(H==W || h==w){
println("Same")
}
else if(( H>W && h>w ) || ( H<W && h<w )){
println("Vertical")
}
else{
println("Horizontal")
}
}