2012-06-03 2 views
11

xy (2D) 좌표 형식으로 나선 은하를 생성하려고합니다. 그러나 수학은 내 강력한 방식이 아닙니다.XY 좌표를 생성하는 나선형을 설명하는 수식을 반복합니다.

I는 나선에 excellent source로부터 수집 한 다음 :

반경 R (t)와 각 t는 simpliest 나선형 아르키메데스 나선의 비례한다. 따라서 방정식은 다음과 같습니다.

(3) 극지 방정식 : r (t) = [a는 상수입니다. X (t) = COS (t)에서, Y (t)의 죄에 (t)
(1) 중앙 식 =이 가입일

(2) 파라미터의 형태를 다음 x² + y² = a²를 [ 아크 탄 (y/x)] ².

This question 은하 세대에 감동의 종류,하지만 응답은 흩어져 아직도 내가 (일명, 내 수학 바보 같은 마음을 이해할 수 없다) 필요에 지나치게 복잡.

본질적으로, 내가해야 할 일은 PHP로 구성된 나선형 수식을 반복하여 ~ 5000 번 실행하여 513x513 XY 그리드에 점을 생성하는 것입니다. 그리드의 크기와 필요한 포인트 수는 앞으로 변경 될 수 있습니다. 은하계가 실제로 어떻게 보이는지와 유사하게 주파수와 둘 다 정확한 수학 공식으로부터 벗어날 수있는 나선형의 기원을 향한 이러한 점을 더 잘 평가하는 것이 더 낫습니다.

이 수학 논문은 a formula that describes the structure of spiral galaxies에 대해 이야기합니다.

나를 완전히 잃는 것은 수학 공식을 PHP로 반복 할 수있는 방법으로 변환하는 것입니다! 이 같은 파라미터 방정식을 만나면

답변

6
// a is 5 here 
function x($t){ return 5 * $t * cos($t); } 
function y($t){ return 5 * $t * sin($t); } 

for ($t = 0; $t < 50; $t += 0.01) { 
    $xyPoint = array(x($t), y($t)); 
    // draw it 
} 

상기 매개 변수에 대한 일반적인 시간을 의미 t을한다. 따라서 t의 증가하는 값을 함수에 연결하고 경과 시간이 증가함에 따라 점진적으로 변화하는 좌표를 얻는 것을 생각할 수 있습니다.

당신은 a, t의 범위 및 t의 증가 단계 크기에 대해 자신 만의 값을 선택해야합니다. 그것은 단지 당신의 요구 사항에 달려 있습니다. cos()과 sin() 모두 최대 값이 1입니다. 캔버스 크기에 따라 a 및 t에 적합한 값을 구하는 데 도움이되는 경우

+0

감사합니다. Chris. 이것은 정확히 파라 메트릭 방정식을 반복하면서 내 질문에 대답했다. 내 다음 과제는 이산 그리드를 준수하도록 수식을 조정하는 것인데, 확실하지 않습니다. – Nick

+0

x (t)의 최대 값은 사용자가 나선형을 중심으로한다고 가정 할 때 그리드 너비의 절반을 초과 할 수 없습니다. 그래서,'a'의 값은 <='gridWidth/(upperBoundOf $ t * 2)'일 필요가 있습니다. 선택한 범위에 따라 나선 수를 결정합니다. 예를 들어, t가 0에서 2PI로 이동하면 하나의 루프를 형성합니다. 0에서 50은 거의 8 루프입니다. 그래서 t를 변수로 남겨 두어야하며 적당한 값을 선택할 수 있습니다 (아무도 알고 있지만 원하는 루프의 수는 얼마인지 알 수 있습니다). for 루프의 스텝 사이즈는'rangeOf $ t/numDesiredPointsToDraw'에 의해 결정됩니다. – goat

관련 문제