y’ +∞ Ax +∞ M P S x i x i +1 y i +1 y i Q | ThuậttoánvẽHyperbol – = 1 (A < B) B1: Thu hẹp vùng vẽVẽ cung ở góc phần tư thứ I rồi lấy đối xứng qua trục tung, trục hoành, gốc toạ độ được các phần còn lại B2: Phân vùng vẽ. Xét cung ở góc phần tư thứ I có phương trình y = A ≤ x y’ = → y’ > 1 Suy ra có 1 vùng vẽ: Vùng vẽ 1: A ≤ x; ứng với y’>1 B 3.1 Vẽ vùng 1 Đặt F(x,y) = B 2 x 2 – A 2 y 2 – A 2 B 2 Biết M i (x i ,y i ) Xác định M i+1 (x i+1 ,y i+1 ) x i+1 Є { x i , x i + 1} y i+1 = y i + 1 Nhật xét : x tăng chậm y tăng đều Gọi M là trung điểm của SP M i (x i + 1/2 , y i + 1) Đặt P i = 4 F(x,y) P i = 4 [B 2 (x i + 1/2) 2 – A 2 (y i + 1) 2 – A 2 B 2 ] (1) P i+1 = 4 [B 2 (x i+1 + 1/2) 2 – A 2 (y i+1 + 1) 2 – A 2 B 2 ] Xét hiệu P i+1 – P i = 4 [B 2 (x i+1 + 1/2) 2 – A 2 (y i+1 + 1) 2 – A 2 B 2 ] – 4 [B 2 (x i + 1/2) 2 – A 2 (y i + 1) 2 – A 2 B 2 ] = 4 [B 2 (x i+1 + 1/2) 2 – A 2 (y i + 2) 2 – A 2 B 2 ] – 4 [B 2 (x i + 1/2) 2 – A 2 (y i + 1) 2 – A 2 B 2 ] = 4 [B 2 ((x i+1 ) 2 + x i+1 – (x i ) 2 – x i ) – A 2 (2y i + 3)] (2) Biện luận theo dấu của P i *Nếu P i < 0 → F(x,y) < 0 → M nằm ngoài (H) → điểm Q gần điểm S Chọn điểm S để vẽ: Khi đó x i +1 = x i + 1 Thay vào (2) ta được P i+1 – P i = 4 [B 2 ((x i +1) 2 + (x i +1) – (x i ) 2 – x i ) – A 2 (2y i + 3)] = 4 [B 2 (2x i + 2) – A 2 (2y i + 3)] P i+1 = P i + 8 B 2 x i + 8 B 2 – 8A 2 y i – 12A 2 (3) *Nếu P i ≥ 0 → F(x,y) ≥ 0 → M nằm trong (H) → điểm Q gần điểm P Chọn điểm P để vẽ: Khi đó x i +1 = x i Thay vào (2) ta được P i+1 - P i = 4[B 2 ((x i ) 2 + x i – (x i ) 2 – x i ) – A 2 (2y i + 3)] = 4[– A 2 (2y i + 3)] P i+1 = P i – 8A 2 y i – 8A 2 (4) Tính P 0 ứng với điểm ban đầu M 0 (A,0) P 0 = 4 [B 2 (A + 1/2) 2 – A 2 (0 + 1) 2 – A 2 B 2 ] = 4AB 2 – 4A + B 2 BEGIN p=p+8B 2 x – 8A 2 y+8B 2 – 12A 2 ; x=x+1; (A 2 -B 2 ) x 2 < A 4 p = 4A 2 B - 4 A + B 2 x = A; y = 0; Put4pixel(x,y,color); p < 0 p=p - 8A 2 y - 12A 2 ; y = y + 1; Put4pixel(x,y,color); No No END Yes Yes LƯU ĐỒ HYPERBOL 2 ThuậttoánvẽHyperbol #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #include <math.h> void InitGraph() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error : %s\n", grapherrormsg(errorcode)); getch(); exit(1); } } void put4pixel(int x, int y) { int a,b; a = getmaxx()/2; b = getmaxy()/2; putpixel(x + a, y + b, 12); putpixel(-x + a, y + b, 5); putpixel(x + a, -y + b, 4); putpixel(-x + a, -y + b,11); delay(20); } void Hyperbol() { float a=70, b=60,p; float x,y; x=a;y=0; put4pixel(x,y); p=4*a*b*b+b*b-a*a; while((a*a-b*b)*x*x<a*a*a*a & y<200) { if(p<0) { p+=8*b*b*x-8*a*a*y+8*b*b-12*a*a; x++; } else p=p-8*a*a*y-12*a*a; y++; put4pixel((int)x,(int)y); } void main() { InitGraph(); Hyperbol(); getch() ; closegraph(); } 3 . y’ +∞ Ax +∞ M P S x i x i +1 y i +1 y i Q | Thuật toán vẽ Hyperbol – = 1 (A < B) B1: Thu hẹp vùng vẽ Vẽ cung ở góc phần tư thứ I rồi lấy đối xứng qua. 2 ; y = y + 1; Put4pixel(x,y,color); No No END Yes Yes LƯU ĐỒ HYPERBOL 2 Thuật toán vẽ Hyperbol #include <graphics.h> #include <stdlib.h>