2012-07-12 4 views
2

2 개의 백분율을 기준으로 원을 2 개의 세그먼트로 나누려고합니다. 파이 차트처럼 하나의 수직 슬라이스로 세그먼트를 생성합니다. 반경과 면적을 알고있을 때 C (중심 각)에 대해이 공식을 찾았지만 C (중심 각)를 구할 수 없었습니다.원 세그먼트 영역에서 중심각 찾기

(R (제곱)/2) * 180) * C) - sin (C))

일단 CI가 cos, tan 및 R (반지름)을 사용하여 원에서 x 및 y 점을 찾을 수 있습니다.

처음에 저는 180 * (smallPercent/50)을 단순히 곱할 수 있다고 생각했지만, 그게 '아니오'라는 것을 깨달았습니다.

답변

0

이 답변을 업데이트했습니다 (원본은 맨 아래에 있습니다).

이미 원의 반지름 (PI * r 제곱)과 작도하려는 영역 (smallerPercentage/100 * areaOfCircle)을 알고 있습니다.

문제를 올바르게 이해하면 주어진 영역과 반경의 세그먼트를 만드는 데 필요한 각도를 계산하는 수식이 없습니다.

enter image description here

은 그러나 모두가 손실되지 않습니다.

각도를 알고 있다면 이미 가지고있는 수식을 사용하여 운동 할 수도 있습니다.A = 0.5 * r 제곱 * (((PI/180) * Θ) - sin (Θ)) 여기서 Θ는 각도입니다.

유일한 해결책은 Θ에서 체계적인 추측을 시작하고 계산 된 면적이 예상 한 것과 일치하는지 (특정 허용 오차 내에서) 있는지 확인하는 것입니다. 다음

그리고 비율 (0이 아닌 이상) 50 미만이 될 것이라고 주어진 : 0 < 각도 < (180)

그래서, 난 90 개도에 나의 첫번째 추측을 만들 것입니다. 면적이 너무 크면 다시 45로 추측합니다. 너무 작 으면 135를 시도하십시오. 매번 크기를 반으로 줄이고 이전 각도에서 더하거나 뺍니다. 당신이 기대하고있는 영역의 허용 오차 내에있는 영역을 얻을 때까지 계속 좁히십시오. 10 명 미만의 추측이 당신을 거기에 가야합니다. 참조 : http://mathforum.org/library/drmath/view/61752.html

난이 도움이되기를 바랍니다

나는 이것이 "1/4 탱크 딥 스틱 문제"라고 생각합니다. 내가 제대로 뭘하려고했는지 이해하기 전에

은 내 원래의 대답이었다

나는 완전히 당신이 달성하려고하는 것을 이해하지 확신 해요,하지만 당신은 각도를 해결할 수

smallAngle = 360/100 * smallerPercentage; 
largeAngle = 360 - smallAngle; 

그리고 언제든지 라디안을 얻기 위해도를 (PI/180) 곱할 수 있습니다.

+0

이 하나의 표준 파이 차트에 사용할 것 인 것이다, 그러나 나는 두 가지의 각각에 요구되는 비율을 제공 (반드시 중심을) user1521972는 하나의 수직 조각을 찾고 생각합니다. –

+0

짐, 맞습니다. 해명 해줘서 고마워. - Sean – Sean

+0

아 맞다. 나는 지금 너를 얻는다. 나는 나의 대답을 업데이트했다. – AW101

1

이것은 뉴턴의 방법에 대한 좋은 응용 프로그램입니다. 다음 C 프로그램을 쉽게 수정하여 문제를 해결할 수 있습니다.원하는 영역을 원을 나타내는 영역의 백분율로 계산하거나 원하는 영역을 별도로 계산하여 입력 할 수 있습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

double chordangle(double r,double a) 
{ 
    double x = a/2.0; 
    do{ 
    x = ((x * r * r/M_PI) - (sin(x) * r * r/2.0) - a)/
     (r * r/M_PI - (r * r/2.0) * cos(x)); 
    }while(((x * r * r/M_PI) - (sin(x) * r * r/2.0) - a) > 1e-11); 
    return x; 
} 

int main() 
{ 
    double a,r; 
    printf("Enter radius: "); 
    if(scanf("%lf",&r)!=1) 
    { 
    printf("You must enter a number.\n"); 
    exit(1); 
    } 
    printf("Enter desired area of slice: "); 
    if(scanf("%lf",&a)!=1) 
    { 
     printf("You must enter a number.\n"); 
     exit(1); 
    } 
    printf("The angle in radians is %lf.\n",chordangle(r,a)); 
    printf("The angle in degrees is %lf.\n",chordangle(r,a)*180.0/M_PI);  
    return 0; 
}