2009-05-31 2 views
3

배경의 영역의 경계 지점을 계산 : 최근 GDI 놀아 하였다는 "원형 세그먼트"와 "서브 영역"

+는 "디스크"360도 일소 변색 디스플레이를 그리는 . (HSL (1,1,1) -> HSL (360,1,1)을 반복하는 RGB 코드로 일부 HSL을 그렸다)

디스크에 대해서는 먼저 위의 방법을 사용하여 완전 솔리드 원을 그렸습니다. 다음 센터를 통해 회색에 두 번째 원은 다음

alt text

그래서이 모든 괜찮 제공합니다 ...하지만 나는 GDI + 여기에 무슨 까다로운 경기를 많이에서 우리를 절연되어 실현 방법은 FillPie입니다. 또한 FillPie을 사용하려면 반경 길이와 반대로 파이의 경계 사각형을 제공해야합니다. 또한 전체 세그먼트 채우기를 수행하고 그 세그먼트의 일부만 지정할 수는 없습니다.

질문 :

사람이 어떤 수학 함수의 방향으로 날 지점 또는 나는 다음 "녹색 채워진 영역"의 영역 & 플롯 포인트를 계산해야 될지 제조법에 어떤 설명을 줄 수 주어진 : 수학 소스에

Point `c` - an x,y co-ordinate 
Angle `A` - an angle from horizontal 
Angle `B - an angle from horizontal where `B` - `A` == the sweep angle 
Length `r` - a distance from `c` 
Length `r2` - a distance from `c` where `r2` - `r` == the `height` of the segment to be filled. 

alt text

링크는 잘하지만 나는 빠른 구글 & 모습을 했어 볼프람 수학 (Wolfram Math)에서 제가 찾고있는 것을 발견 할 수있었습니다. 또한 테두리 (x, y)의 시퀀스를 생성 할 수있는 방법이 있거나 Graphics.FillPolygon에 Point[]으로 전달 될 수있는 방법이 있으면 멋지기도합니다.

답변

3

영역은 외부 및 내부 디스크 부분의 차이입니다. 디스크 부분의 면적은 각 스위프에 비례한다 :

area = (b-a)*((r+r2)^2-r^2)/2 

ab는 라디안으로 표현되어야한다. b-a = 2*Pi의 경우, area = Pi*(r+r2)^2 - Pi*r^2은 외부 디스크와 내부 디스크의 영역의 차이입니다.

당신은 ta에서 b 다릅니다

x = cx + r * cos(t) / x = cx + (r+r2) * cos(t) 
y = cy + r * sin(t) / y = cy + (r+r2) * sin(t) 

를 사용하여 내부/외부 원에 포인트를 생성 할 수 있습니다.

+0

+1 에릭. A와 B 사이의 t 증가량이 작을수록 점수가 더 좋을 것입니다. 예 : A가 30 *이고 B가 45 * 인 경우 A와 B 사이의 값이 커질수록 커브의 해상도를 더 좋게하십시오 ... 낮음 Res = (30, 35, 40, 45) 높음 Res = (30, 30.5, 31, 31.5, ... 44.5, 45) –

+0

예, 외부 회로의 일부 픽셀 수에 해당합니다. cle. 외부 원상의 점 사이의 호 길이는 (r + r2) * dt입니다. 여기서 dt는 라디안 단위의 각도 증분입니다. –

+0

+1. @Eoin, http://hyperphysics.phy-astr.gsu.edu/hbase/vect.html에서 벡터 생성/연산 공식을 참조하여 Eric의 공식이 어디에서 왔는지 확인하십시오. –

0

희망이 도움이됩니다. 두 번째 부분은 원

http://www.wikihow.com/Calculate-the-Area-of-a-Circle

+0

건배 (X1, y1)과 (x2, y2)가, 너무 많은 단위의 실제 영역이 아니다 있습니다^내가 찾고이 있지만, 비행기의 해당 영역을 정의하는 점 ...이 문제를 반영하도록 질문 제목을 업데이트했습니다. 건배, 좋은 자원. –

+0

우리는 점 C, 각도 A와 B, 반경 r1과 r2를 알고 있다고 가정하고 요점을 요점을 알고 싶습니까? 예 : A와 r1에 의해 생성 된 벡터를 하나의 내부 점을 얻고, Ar1 + Ar2 + c를 사용하여 같은 경로에 외부 점을 얻은 다음 ... B 측에 대해서도 마찬가지입니다. –

+0

@Jonathan.Yep . c, A, B, r & r2가 라인을 그리는 데 사용될 수있는 Point [] 배열을 뱉어 낼 수식에 대한 알려진 입력이라고 가정하고 그 영역을 채운다. –

0

원의 세그먼트 영역의 섹터의 면적을 산출하는 방법을 제공하는 것은 간단 라디안 호의 각 시간 반경이다. 따라서 녹색 원의 면적은 분명합니다.

(B-A) * r2 
0

당신은 (이 의사 코드) 선을 그릴 필요가 : 각도에서 작은만큼 증가에 대한

for aa from A to B 
    set color to required color // you could use aa in an equation with HSL to get something like your sample 
    x1=r*cos(aa)+x 
    y1=r*sin(aa)+y 
    x2=r1*cos(aa)+x 
    y2=r1*sin(aa)+y 
    draw line between (x1,y1) and (x2,y2) 

, 작은-충분히 반경이 확인되어야한다. 당신이 찾고있는

점은 각각의 각도 AA