gpt4 book ai didi

c# - 用数组模拟 4 个象限

转载 作者:行者123 更新时间:2023-11-30 15:30:15 25 4
gpt4 key购买 nike

我正在使用 C# 创建一个应用程序,该应用程序构建对象并将它们移动到笛卡尔平面上的不同位置。我从位置 (0,0) 的第一个对象开始。我想我可以在二维数组中表示它,但我应该如何表示位置 (-x,y)、(-x,-y,) 或 (x,-y) 处的对象?

现在我正在考虑使用四个数组来表示不同的象限。如何更改数组索引的下限?那可能吗?如果不是,我想我可以做一些算术将 -x 或 -y 数字映射到每个数组的自然数,但我希望还有另一种解决方案。

我还考虑过将原点放在数组的中间,但数组在运行时会增长,因此我必须不断地移动内容以找到新的中间位置。这似乎更令人困惑。

我的做法是否正确?有更简单的解决方案吗?

最佳答案

我认为您可能对您遇到的问题想得太多了。根据您发布的内容,您需要知道:

  • 给定点在笛卡尔平面上的哪个象限?

我设想的解决方案是这样的:

enum CartesianQuadrant {
None = 0,
I,
II,
III,
IV,
}

struct Point {
public readonly double X;
public readonly double Y;
public readonly CartesianQuadrant Quadrant;

public Point(double x, double y) {
X = x;
Y = y;
Quadrant = x == 0 || y == 0 ? CartesianQuadrant.None :
x > 0 ? y > 0 ? CartesianQuadrant.I : CartesianQuadrant.IV :
y > 0 ? CartesianQuadrant.II : CartesianQuadrant.III;
}
}

然后当你初始化一个Point , Point.Quadrant将有坐标所在的象限。然后你可以有一个 Point[]IList<Point> ,或任何适合您需要的集合。

使用示例:

  var p1 = new Point(3.0, 2.0); // p1.Quadrant == CartesianQuadrant.I
var p2 = new Point(-3.0, 2.0); // p2.Quadrant == CartesianQuadrant.II
var p3 = new Point(-3.0, -2.0); // p2.Quadrant == CartesianQuadrant.III
var p4 = new Point(3.0, -2.0); // p2.Quadrant == CartesianQuadrant.IV
var pnone1 = new Point(0.0, 2.0); // p2.Quadrant == CartesianQuadrant.None
var pnone2 = new Point(2.0, 0.0); // p2.Quadrant == CartesianQuadrant.None
var pnone3 = new Point(0.0, 2.0); // p2.Quadrant == CartesianQuadrant.None

关于c# - 用数组模拟 4 个象限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22429220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com