2012-07-01 8 views
1

저는 수학 함수 스케 쳐 (sketcher) 프로그램을 연구 중입니다. 함수는 사용자가 입력하고 프로그램은이를 파싱하고 커브를 그립니다. 나는 sin(x), cos(x)과 같이 작은 범위 간격을 갖는 함수가 있고 [-1 : 1] 간격 만있는 문제가있다. 반대로 어떤 다른 함수는 매우 큰 간격 (예 : e^x)을 가지므로 매우 빠르게 커집니다. X 축 값을 사용하여 함수에서 Y- 액세스 값을 계산합니다. X 축 값은 일반적으로 -40에서 40까지 고정됩니다. 그러나 일부 함수에는 매우 큰 Y 값이 있고 일부에는 매우 작은 값이 있기 때문에 X 액세스와 같은 Y 액세스 세트에 대한 고정 값에 의존 할 수 없습니다.그려지는 커브 확대하기

나는 곱셈 방식으로 커브를 확대/축소하려고했는데 일반적인 기능으로 잘 작동했습니다. 예를 들어, sin(x)sin(x) * 3으로 확대됩니다. 그러나 일부 기능은 인자를 곱할 때 확대되지 않지만 기능 자체는 변경된다는 사실을 알게되었습니다. 예는 f(x) = sin(log(cosh(sec(-x))))입니다.

함수 곡선을 확대/축소하여 Y- 액세스 최대, 최소 및 증분 단계 값을 조정할 수있는 방법을 찾고 싶습니다. 물론 커브를 확대하여 커브를 최대 \ 최소 Y 값. 어떤 수학 \ 프로그래밍 아이디어라도 가능합니다. 감사합니다

용도 : System.Drawing.Graphics.DrawCurve(Pen pen, PointF[] curve)

+0

'f (x) = A * sin (log (cosh (sec (-x))))'나를 위해 스케일을 조정/확대합니다. 함수는 어떻게 바뀌나요? – Ishtar

+0

몇 가지 요소를 늘려보십시오. 함수의 크기가 조절되지 않습니다. –

답변

3

변환 매트릭스 나를 위해 잘 작동합니다. 당신은 그것을 시도하고 볼 수 있습니다 :

// Zoom transformation on the Graphics object 
float zoomFactor = 1.5f; 
Matrix mat = new Matrix(); 
mat.Scale(zoomFactor, zoomFactor, MatrixOrder.Append); //zoom to 150% 
myGraphics.Transform = mat; 
// Now draw your points... 

참고 :

난 강력하게이 작업의 종류 생각 (에서 줌 아웃), 뷰에 모델을하지 수행해야합니다. 확대/축소 작업은 그래픽 개체 또는 다른 일부에서 호출하는 것처럼 수행해야합니다 (화면). 모델을 변경하면서 내 수학에서 렌더링하는 메서드를 변경하는 것은 깨끗하지 않습니다. 따라서 다른 수학 함수를 그리게됩니다.