2016-07-03 6 views
0

그래서 극좌표를 사용하여 피자에 페퍼로니를 그리려고하지만 원점을 이동하는 데 문제가 있습니다. 여기에 내 코드입니다 :비주얼 베이직에서 극좌표를 사용하여 그림을 그릴 때 원점 이동

Public Class polarToCartesian 

Property X As Double 
Property Y As Double 
Sub New(Radius As Double, AngleDegree As Double) 
    Dim AngleRadian As Double = AngleDegree * 2 * Math.PI/360 
    X = Radius * Math.Cos(AngleRadian) 
    Y = Radius * Math.Sin(AngleRadian) 
End Sub 
End Class 

Public Class CartesianToPolar 
    Property Radius As Double 
    Property AngleRadian As Double 
    ReadOnly Property AngleDegree As Double 
    Get 
     Return AngleRadian * 360/(2 * Math.PI) 
    End Get 
    End Property 

    Sub New(X As Double, Y As Double) 
     Radius = (X^2 + Y^2)^0.5 
     AngleRadian = Math.Atan2(Y, X) 
    End Sub 
End Class 

그리고 여기가 pepperonis 그리기 해요 방법은 다음과 같습니다 내 결과를 여기에

If pTopping = True Then 
    Dim counter = 0 
    Dim imgPic(3) As Image 
    imgPic(0) = pepperoniOne 
    imgPic(1) = pepperoniTwo 
    imgPic(2) = pepperoniThree 
    Do Until counter > 38 
     Dim value As Integer = CInt(Int((3 * Rnd()) + 0)) 
     Dim i = imgPic(value) 
     Dim PTC As New polarAndCartesian(CInt(Int((60 * Rnd()) + 0)), CInt(Int((360 * Rnd()) + 0))) 
     e.Graphics.DrawImage(i, CInt(PTC.X), CInt(PTC.Y)) 
     counter += 1 
    Loop 
End If 

그리고있어 :

enter image description here

나는 지점을 이동하는 방법을 어떤 아이디어 내가 드로잉을 시작하기 전에 극좌표상의 원점? 나는 이걸로 머리를 감싸는 데 어려움을 겪고있다.

답변

1

피자 파이의 중심을 계산하여 peperoni x 및 y에 추가해야합니다. 극과 또한

PTC.X += (pie.X + pie.Width ) \ 2 ' "\" for integer division instead of "/" 
PTC.Y += (pie.Y + pie.Height) \ 2 

, 그것은 측면보다 더 페퍼로니을 가지고 같은 파이의 중심이 보일 것입니다 좌표. 대신에 무작위로 X와 Y를 가져 와서 피자 파이 동그라미 안에 있는지 확인할 수 있습니다. (

Dim random as New Random() 
Dim value = random.Next(3); 
+1

중앙으로 토핑을 집재 피하기 위해, 반경이 어두운 R = Math.Sqrt (CDbl에는 '로 선택 될 수있다 :


는 .NET 0과 2 사이의 임의의 정수를 얻으려면 rand.Next())/Integer.MaxValue) * rMax' 여기서'rand = New Random()'과'rMax'는 허용되는 최대 반지름입니다 (아마 rPizza - rPepperoni). 참조 : [원 안의 임의의 점] (http://stackoverflow.com/a/29061071/1115360). –

+0

감사합니다. 나는 마지막 부분 주위에 내 머리를 감쌀 수 없었다. .. 나는 극좌표를 세우는 것이 나의 두뇌를 하루 동안 튀겼다 고 생각한다. – Dunnage