원의 면적을 측정하여 PI...JavaScript에서

이것은 재미있는 자바스크립트 프로그램입니다. 당신은 스스로 실현할 수도 있고, 젊은 프로그래머와 함께 인코딩 클럽이나 집에서 실현할 수도 있습니다.

수학


π의 근사치는 아키미드 시대 이래로 이미 알고 있다.여러 해 동안 많은 수학자와 연구자들은 점점 더 높은 정밀도로 PI의 값을 계산하는 데 주력해 왔다.
사람들은 이 재미있는 숫자의 값을 계산하기 위해 많은 새로운 방법을 발견했다.
π의 값이 많은 수학 응용에서 사용되기 때문에 매우 중요하다는 것을 안다.가장 유명한 응용은 이미 알고 있는 반경 원의 둘레와 면적을 확정하는 것이다.
본고에서 우리는 중학생들도 이해할 수 있는 방법을 사용하여π의 근사치를 계산하려고 한다. 우리는 수동으로 원의 면적을 측정한 다음에π를 확정하기 위해 역계산을 할 것이다.
우리는 수학 수업에서 원의 면적은 다음과 같다는 것을 알았다.

A = πr²


우리는 통상적으로 면적이나 반경의 방정식을 구한다.그러나 이번에 우리는π의 방정식을 구해낼 것이다.

π = A / r²


알고리즘


이 방정식을 풀기 위해서 우리는 자바스크립트의 도움으로 경험 방법을 사용할 것이다.이 방법은 매우 간단하다.
  • 단계 1: 반지름이 r인 원으로 가정
  • 단계 2: 원을 촘촘한 정사각형으로 둘러라.정사각형의 모서리는 원의 지름과 같을 것이다
  • 단계 3: 원 안의 모든 픽셀을 계산하여 원의 면적을 확인
  • 단계 4: 면적을 반경 제곱으로 나누어π를 확정한다. 상기 공식
  • 과 같다.

    도전보시다시피 알고리즘은 간단하지만 첫 번째 도전은 이미 나타났습니다.단계 #3에서 우리는 점이 원 안에 있는지 확인해야 한다고 말했다.
    이를 위해, 우리는 바깥쪽 정사각형 내의 모든 점을 스캔하고, 이 점이 원 안에 있는지 확인합니다.이것은 비교적 원의 반경과 이 특정점에서 원심까지의 거리를 통해 이루어진 것이다.
    거리가 반지름보다 작거나 같으면 점은 원 안에 있습니다.

    이것은 일종의 경험 방법이기 때문에, 우리는 계산 정밀도를 높이기 위해 충분한 원을 사용하려고 시도할 것이다.반경이 비교적 작은 원을 사용하면 원이 그다지 이상적이지 않아서π의 근사 정밀도가 비교적 낮을 수 있다.다음 그림을 참조하십시오.

    도전이전의 도전 자체가 새로운 도전을 제기했다.우리는 어떻게 두 점 사이의 거리를 확정합니까?
    답은 기하학적 지식과 꼬투리의 정리를 빌리는 것이다.
    우리는 두 개의 좌표를 알고 있기 때문에, 우리는 삼각형 변을 확정한 후에 피타고라스의 정리를 이용하여 사변을 찾을 수 있다.
    다음 그림은 이것에 대해 말하지 않아도 알 수 있다.

    이제π를 계산하는 자바스크립트 코드를 작성하는 데 필요한 모든 데이터가 생겼습니다.
    모든 JavaScript 환경이나 운동장을 사용하여 코드를 작성할 수 있습니다.본고에서 우리는 무료codeguppy.com 환경을 사용할 것이다. (무료 계정을 계속 만들면 즐겁게 놀 수 있다.)
    지금까지 도형 개념만 논의했지만 코드는 어떤 도형 라이브러리도 사용하지 않는다.우리는 원이나 정사각형을 그릴 필요 없이 순수한 JavaScript만 사용하여 이 알고리즘을 실현할 수 있다.
    var p = calcPI();
    println(p);
    
    function calcPI()
    {
        // Choose an arbitrary circle radius
        var r = 100;
        var diameter = r * 2;
        var area = 0;
    
        // Scan all the pixels inside the square
        for(var x = 0; x < diameter; x++)
        {
            for(var y = 0; y < diameter; y++)
            {
                // Calculate the distance from each pixel
                // to the center of the circle
                var d = dist(x, y, r, r);
                if (d <= r)
                {
                    // If distance is less than the radius
                    // then add it to the area of the circle
                    area++;
                }
            }
        }
    
        // Calculate PI by dividing the area to the 
        return area / (r * r);
    }
    
    codeguppy.com 편집기에서 위의 코드를 복사하여 실행하면 다음과 같은 결과가 표시됩니다.
    3.1415
    
    이런 간단한 경험 방법에 대해 이것은 상당히 정확하다!
    주의: 주의하십시오. 우리는 두 점 사이의 거리를 계산하는 거리 함수를 정의하지 않았습니다.함수가 codeguppy.com 에 정의되어 있기 때문입니다.그러나 외부에서 코드codeguppy.com를 실행하려면 위에서 설명한 몇 줄 코드에서 이 함수를 쉽게 실행할 수 있습니다.
    우리는 디스트 함수로 이루어진 연습을 관심 있는 독자들에게 남겨 둘 것이다.

    가시화 원


    보시다시피 이 방법을 사용하면π를 계산하기 위해 어떤 도형 라이브러리도 사용할 필요가 없습니다.그러나 우리는 도형 환경에서 약간의 즐거움을 가지고 우리가 스캔하고 있는 점을 가시화할 수 있다.
    "teal"(원 안에 있는 경우) 이나 "옅은 파란색"(원 밖에 있는 경우) 에서 점 함수를 사용하여 스캔 점을 그립니다.
    올바른 위치에 다음 stroke()point() 행을 추가하기만 하면 됩니다.
    ...
                if (d <= r)
                {
                    // If distance is less than the radius
                    // then add it to the area of the circle
                    area++;
    
                    stroke("teal");
                }
                else
                {
                    stroke("lightblue");
                }
    
                point(x, y);
    ...
    
    이것이 바로 실행 효과입니다.

    나는 네가 이 자바스크립트 수학 탐구에 흥미가 있기를 바란다.
    너는 이 운동장에서 이 코드의 작업 예시를 찾을 수 있다. https://codeguppy.com/code.html?Z25MRrzMBK8zRwDaeaZY
    즐거운 인코딩, 당신의 인코딩 경험을 위조하지 마세요!

    좋은 웹페이지 즐겨찾기