两个坐标的相对基本方向 [英] Relative cardinal direction of two coordinates

查看:124
本文介绍了两个坐标的相对基本方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

定义了以下枚举:

public enum Direction
{
    North,
    South,
    East,
    West,
    Northeast,
    Northwest,
    Southeast,
    Southwest,
    Undefined
}

给出二维空间中的两组坐标,我想确定从点2到1的相对基本方向.

Given two sets of coordinates in two-dimensional space, I'd like to determine the relative cardinal direction from Point 2 to 1.

示例:

  • P1(1,1)和P2(0,1)返回Direction.North因为P2在P1以北
  • P1(1,1)和P2(5,4)返回Direction.Southeast
  • P1(1,1)和P2(1,1)返回Direction.Undefined

我当前的方法涉及很多条件,即

My current approach involves a bunch of conditions, i.e.

if (P1.X == P2.X)
{
    // either North, South or Undefined
    if (P1.Y < P2.Y)
        return Direction.South;
    else if (P1.Y > P2.Y)
        return Direction.North,
    else
        return Direction.Undefined;
}
else if (P1.Y == P2.Y)
{
    ...
}
else 
{
    ...
}

我正在寻找一个更短,更优雅的解决方案.

I'm seeking a shorter and more elegant solution.

推荐答案

我的3美分-我正在等待改善

My 3 cents - i'm waiting for improvements

这是枚举:

public enum Direction
{
    North = 0,
    South = 4,
    East = 6,
    West = 2,
    Northeast = 7,
    Northwest = 1,
    Southeast = 5,
    Southwest = 3,
    Undefined = -1
}

转换为:

public static Direction GetDirection(Point p1, Point p2) {
    double angle = Math.Atan2(p2.Y - p1.Y, p2.X - p1.X);
    angle += Math.PI;
    angle /= Math.PI / 4;
    int halfQuarter = Convert.ToInt32(angle);
    halfQuarter %= 8;
    return (Direction)halfQuarter;
}

但是它不会返回Direction.Undefined,因为

如果y为0且x为0,则θ= 0.

if y is 0 and x is 0, θ = 0.

(来自 https://msdn.microsoft .com/library/system.math.atan2(v = vs.110).aspx )

这篇关于两个坐标的相对基本方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆