2014-09-23 2 views
0

반경 r을 사용하고 원점을 중심으로 반경 r의 원 안에 정수 값의 개별 점을 정확하게 반환하는 함수를 작성해야합니다. 어떤 조언을 부탁드립니다. 다만 접근법으로서MATLAB : 그래프 아래의 불연속 점의 수를 반환합니다.

+0

지금까지 무엇을 했습니까? 우리에게 보여주세요. 대표적인 이미지도 좋을 것이다 :) –

+0

나는 현재 코드에 관해서는별로 없다. 그러나 내 생각에 -R에서 각 x와 y를 나타내는 R의 정수 범위를 가지며 x^2 + y^2 user2049004

+0

@ user2049004 - 당신은 올바른 생각을 가지고 있습니다. 당신은 단지 당신의 좌표를 생성하는 올바른 기능을 알아 내야했습니다 :) 내 게시물을 참조하십시오. – rayryeng

답변

0

:

  • 매트릭스 포인트가 될 경우
  • (엄격하게) 기능/조건을 정의하는 불연속 점에 딱 맞는 정방 행렬을 정의하는 원 내의
  • 카운트 실제 값의 수

행운을 비네. 문제가있을 경우 언제든지 게시를 수정할 수 있습니다.

+1

나는 이것을 LOL에 넣으면 문자 그대로 내 솔루션을 타이핑했다. 나는 그것이 나를 위해 좋은 정신 운동이었던 것에 따라 그것을 어떻게해서든지 해결하기로 결정했다. 어쨌든 잘 될거야! – rayryeng

+0

만약 내가 집에서 matlab을했다, 나는 이것도했을거야;) – Pieter21

1

코드를 푸는 데 아무런 시도도하지 않았지만 좋은 연습 문제입니다. 먼저 할 수있는 것은 원점에 중심을 둔 좌표의 정사각형 그리드를 생성하는 것입니다. 범위는 -r+r 사이입니다. 질문을 올바르게 해석하는 경우 2D 그리드의 각 점 사이의 간격은 1입니다.

일단 이렇게하면 유클리드 거리가 정확히 r보다 작은 위치를 찾은 다음이 조건이 충족되는 지점 수를 반환 할 수 있습니다. 점의 정사각형 격자를 생성하려면 meshgrid을 사용하십시오.

[x,y] = meshgrid(-r:r, -r:r); 
x = x(:); 
y = y(:); 
num_points = sum(x.^2 + y.^2 < r^2); 

x = x(:);y = y(:);가 중요하다 : 당신이 r에 반경을 정의했다고 가정하면, 다음과 같은 코드를 할 것입니다. 그러면 각 xy에 대한 2D 그리드가 단일 열 벡터로 바뀝니다. 특히 매트릭스의 각 열을 가져 와서 단일 벡터를 만들기 위해 위에서부터 아래로 모두 쌓습니다. 분석이 쉬워집니다. 그 이유는 2D 행렬에 sum을 사용하려고하면 한 방향으로 만 합칠 수 있기 때문입니다. 모든 열을 개별적으로 합하거나 모든 행을 개별적으로 합할 수 있습니다. 전체 배열에 대해 합을 구하기 때문에 sum을 두 번 호출하거나 2D 그리드를 1D 배열의 스택으로 변환 할 수 있습니다. 나는 그것이 더 깨끗하다고 ​​생각하기 때문에 두 번째 접근법을 선택했으나 일부 ​​사람들은 sum도 함께 호출하는 것을 신경 쓰지 않는다. 단지 스타일 선호도 일 뿐이다.

일단 이렇게하면 유클리드 거리가 반지름보다 작은 지 여부 만 확인하면됩니다. 제곱근 계산을 피하기 위해 Euclidean 제곱 거리를 계산합니다. 계산 시간이 절약됩니다. 그런 다음 모든 인스턴스에 대해 합계를 계산하면 반경 내에있는 점의 수를 정의합니다.

예를 들어 반경이 r = 2이라고 가정합니다. 이 점을 우리의 meshgrid은 다음과 같은 형태가 될 것이다 우리의 2D 그리드의 각 좌표를 들어

r = 2; 
[x,y] = meshgrid(-r:r, -r:r) 

x = 

    -2 -1  0  1  2 
    -2 -1  0  1  2 
    -2 -1  0  1  2 
    -2 -1  0  1  2 
    -2 -1  0  1  2 

y = 

    -2 -2 -2 -2 -2 
    -1 -1 -1 -1 -1 
    0  0  0  0  0 
    1  1  1  1  1 
    2  2  2  2  2 

, 우리는 각 지점에서 관련된 (x,y) 쌍을 가지고있다. 우리가 얻을 포인트의 마지막 번호는 :

num_points = 

9 

이 엄격하게 적은 2보다는 원점을 중심으로하는 3 × 3 블록해야되는 점으로 의미가 있습니다.1이 좌표가 엄격하게되고 만족을 의미하는 true를 나타내는 있습니다

[x,y] = meshgrid(-r:r, -r:r); 
disp(x.^2 + y.^2 < r^2); 

0  0  0  0  0 
0  1  1  1  0 
0  1  1  1  0 
0  1  1  1  0 
0  0  0  0  0 

위치 : 당신이해야 할 경우의 그리드는 1 차원 벡터로 좌표를 변환하기 전에 모습을 시각화 할 수 r보다 작음 0 인 위치는 false으로 바깥에 있음을 나타냅니다. 알고리즘의 마지막 부분은이 배열 전체를 합한 것입니다.이 배열은 우리에게 9를주고, 정확히 얼마나 많은 점이 정확히 r 안에 있는지 알 수 있습니다.


희망이 있습니다. 행운을 빕니다!

관련 문제