2014-01-29 3 views
0

누군가 포인트 값을 배열에 추가하는 방법을 알고 있습니까?포인트 추가 배열

+1

포인트 배열을 사용하고 필요에 따라 X 및 Y 값을 두 배로 캐스팅 할 수 없습니까? –

답변

2

왜 배열의 유형을 double으로 바꾸시겠습니까? Point 배열을 사용할 수 있습니다.

Point[] points = new Point[2]; 
points[0] = new Point(15,15); 
points[1] = new Point(200,220); 

double someResult = (points[0].x - points[1].x) * (points[0].y - points[1].y); 

또는 반복 할 수 있습니다.

for (int i = 0; i < points.Lenght; i++) 
{ 
     // do something with points[i] 
} 

또는 목록과 함께;

List<Point> points = new List<Point>(); 
points.Add(new Point(1,1)); //ect 

또는

List<Point> points = new { new Point(1,1), new point(2,2) //ect }; 

foreach (Point p in points) 
{ 
    // do something with p 
} 

당신은 루프를 통해 선호 수있는 몇 가지 임의 LINQ;

double xTotal = points.Aggregate((c, n) => c.x + n.y); // gives sum or all x values 
double yTotal = points.Aggregate((c, n) => c.y + n.y); 

배열에 2 개의 Point를 추가하면 배열에 4 개의 값이 저장됩니까?

일종의. 배열은 두 개의 Point 인스턴스를 보유합니다. 각각의 값은 x이고 값은 y이지만 일반적으로 배열에 2 개의 값이 있다고 가정합니다. 만약 당신이 단지 4 개의 더블을 그룹핑하고자한다면, Point을 전혀 사용하고 싶지 않을 것입니다. 같은 구조체를 선언 할 수 있습니다;

public struct Rect 
{ 
    double a; 
    double b; 
    double c; 
    double d; 
} 

네 개의 4 중 복식을 더 잘 그룹화하십시오. 또는 Tuple<double, double, double, double>을 사용할 수도 있지만 대부분의 개발자는 조금 이상하게 보일 것입니다. (이봐, 나는 적어도 좋아해.) 그러나 읽기 전용입니다.

var tuple = new Tuple<double, double, double, double(1, 2, 3, 4); 
+0

@ user3213304 배열은 두 개의'Point' 's를 가지며'Point'의 각각은'x'와'y'를 가지므로'array [0] .x'' 배열 [0] .y'과' 'array [1] .x'와'array [1] .y'입니다. 배열에 2 개의 점이 있고 점에 각각 2 개의 값이 있으므로 배열에 "4 개의 값"이 있다고 말할 수 없습니다.모든 유형의 배열을 가질 수 있으므로 배열에 4 개의 값이 있다고 말하면 각각의 점에는 2가 들어 있기 때문에 의미가 없습니다. 'File []'또는'string []'또는'double []'을 가질 수 있습니다. 배열의 항목 수는 포함 된 유형의 속성과는 독립적입니다. – evanmcdonnal

+0

@ user3213304 루프의 예도 있습니다. 어떻게 값을 곱하려고하는지 모르겠습니다. 그 방정식을 적용하기를 원한다면 배열이나리스트의 모든 항목에 적용해야합니다. 그렇다면 충분히 쉽습니다. 그러나 나는 그렇게하는 것이 합리적이라고 생각하지 않습니다. 그래서 당신이 원하는 것을 더 설명해야합니다. – evanmcdonnal

+0

감사합니다. 모든 것을 정말 잘 설명했습니다. – user3213304

0

나는 클래스를 선언하는 당신을 제안하고 여기있다 :

public class Rectangle 
{ 
    public Rectangle(Point left, Point right) 
    { 
     Left = left; 
     Right = right; 
    } 

    private Point Left{get; set;} 

    private Point Right{get; set;} 

    public double CalculateArea() 
    { 
     return (points[0].x - points[1].x) * (points[0].y - points[1].y); 
    } 

} 

그리고 여기 당신이 그것을 사용하는 방법입니다 : 일반적으로

var rec = new Rectangle(new Point(15,15), new Point(200,220)); 
var someResult = rec.CalculateArea(); 
0

당신이 리팩토링 더 나을 것 더 의미 론적 의미가 있기 때문에 Point 배열을 사용하는 프로그램.

그러나 이것은 진정한 사각형 (안 대신이 네 점에게 필요한 모든 네 개의 단면 형상) 인 경우, 당신이 할 수 있습니다 :

public double[] ConvertPointsToArray(Point topLeft, Point bottomRight) 
{ 
    var points = new double[4]; 
    points[0] = topLeft.x; 
    points[1] = topLeft.y; 
    points[2] = bottomRight.x; 
    points[3] = bottomRight.y; 
    return points; 
} 

을 그리고 다음과 같이 배열을 사용할 수 있습니다 :

var points = ConvertPointsToArray(left, right); 
var value = (points[0] - points[2]) * (points[1] - points[3]); 

그러나 당신은 점 배열로 인코딩하고 엉망까지 쉽게하는 방법을 알고 있어야 볼 수 있습니다.

두 점으로 된 사각형 클래스가 더 유용합니다.