Ví dụ như thế này. Giống như các giá trị trên trục tọa độ vậy, cách đều nhau, chỉ khác là trục tọa độ giờ đây uống cong lại thành hình tròn thôi. Mong các bạn giúp đỡ. Chỉ cần thuật toán thôi cũng đc. Lúc đầu định làm bằng cách dùng thuật giải vẽ đường tròn, nhưng thay vì dùng lệnh putpixel(x,y), thì dùng lệnh outtextxy(x,y,"string") tại những khoảng cách cố định. NHưng thuật giải midpoint để vẽ đường tròn khó hiểu quá. Mình ko phải ngành Công nghệ thông tin nên hơi khó. Thank
Theo ý tưởng mình nghĩ thì như thế này không biết đúng hông nữa: Dùng borland C 3.1 Đầu tiên chuyển sang chế độ vga, vẽ 1 cái đường tròn, xác định tọa độ của 4 điểm chính, ví dụ là cái hình tròn đó nội tiếp 1 cái hình vuông thì ta xác định cái trung điểm 4 cái cạnh. Rùi add số tuần tự vào là xong Hên xui vậy thui
Cách đó ko được rồi bạn, 1 phần vì theo yêu cầu mình cần ghi 50 giá trị trải đều trên toàn bộ hình tròn. Cám ơn bạn nhé Khó thật.
mình chưa học đồ hoạ nhưng theo mình nghĩ thì _ dùng thuật toán midpoint, xac định khoảng cách các pixel để thay vì putpixel lien tiếp ta chỉ xuất ra 50 pixel theo hình tròn như yêu cầu _ rồi thay vì putpixel dùng outtextxy _ hoặc là sử dụng thuật toán vẽ đa giác đều có N cạnh thì ta sẽ outtextxy tại các đỉnh của đa giác đều đó :p
Mình làm được rồi, dùng các công thức tìm giao điểm để làm thôi. Nhưng ko hiểu do chương trình quá nặng (thực ra chỉ là vài trang giấy) hay sao mà giờ đây lại có hiện tuợng chạy đc 1 lần, lần 2 ko chạy nữa, nhấn Ctrl+F9 thì nó chạy, nhưng sau đó lại quay trở lại màn hình soạn thảo ngay lập tức. Một số thuật toán đúng và đơn giản được thêm vào sau này lại chạy ko đúng. Lâu lâu lại báo lỗi Not enough memory. Trong khi đó chỉ là chương trình với gần 20 biến. Chẳng lẽ C++3.0 lại ko đáp ứng yêu cầu sao? Nếu mình chuyển sang C chạy trên nền Win thì nên chạy bằng cái nào? Visual C 6.0 đc ko? Mình mang toàn bộ mã nguồn chạy thằng luôn đc ko? có cần chỉnh sửa gì ko? Vì thời gian nộp bài còn có 2 ngày à. Mong các bạn giúp mình.
mình xài Borland C++ 3.1 thấy ổn định lắm nộp bài = giấy thì chắc chỉ xem thuật toán thôi btw bạn có thể share code cho mình chạy thử ko, có gì mình test giùm bạn luôn :'>
Vừa down BorlandC 3.1 về. Vẫn bị vậy bạn à. Vừa chỉnh sửa để chạy trên Dev C++ thử xem. Chạy đc 1 lúc thì báo Lỗi (do windows báo và thoát). Đây mà chương trình vẽ đồ thị Smith của môn Siêu cao tần. Mã nguồn ở dưới.
mình chạy thử rồi nhìn đẹp lắm nhưng chỉ Ctrl-F9 đc. 1 lần thôi nên trc' mắt bạn cứ nộp source và cái file.EXE mà compiler tạo ra lần đầu tiên chạy để đảm bảo là chưong trình chạy đúng :hug: cái file EXE thì chạy lần nào cũng Ok cả
Mình đã chạy được trên Dev C++, chạy tốt, nhưng chạy còn chập hơn cả trên BC3.1 nữa. Nhất là cái đoạn xóa những phần dư thừa xung quanh vòng tròn. Hình như trong C ko có hàm chuyển từ double => string. Mà chỉ có hàm fcvt(value,length,&decimal,&sign); để chuyển thành string, nhưng ngặc nỗi nó ko chuyển dấy phẩy ( tức 1234,5 =>12345, mà nó gán cho decimal=4 để chỉ vị trí dấu phẩy) Nếu ko có hàm nào khác thì đành thêm mấy lệnh để chèn dấu phẩy vào vậy :( Ngay gần đầu chương trình, ở vòng while thứ 2 Có 1 đoạn mã để đặt các chỉ số x1, với các giá trị x1=0.1; 0.2;...;1.0;1.2;1.4;...2;3;4;5 (5 là max rồi) Tức theo những khoảng cách cố định, chứ ko phải đặt tất cả các giá trị của x1 Nhưng ko thể làm được. Mình dùng hàm này Hàm chia lấy phần dư. tức nếu ví dụ x1=0.04 thì fmod(x1*10,1)=0,4 , khác 0 nên bị loại. Còn nếu x1=0.2 thì fmod(x1*10,1)=0 (lấy phần dư mà) nhưng ko đc. Theo mình nghĩ thoaatj toán là đúng đó chứ. ko hiểu tại sao nữa.
khúc này mình cũng thấy lạ thật nhưng có cách khắc phục là bạn lấy 1 biến tạm nào đó (float temp=x1*10) rồi fmod(temp,1) sẽ đúng
Thử đủ mọi cái rồi mà vẫn ko đc. Kông thể hiểu nỗi, chẳng lẽ C bị lỗi :( Sửa biến thành float thì lại đc ( lúc trước dùng double) Trong khi công thưc là fmod(double,double) Híc híc
bài này phải dùng sin cos bác ạ mình có đoạn này trong sách bác thử nghiên cứu xem nhé: for( i=1; i<50; i++) { goc = 5/2 * pi - pi/6 * ( i -1 ) x = x0 + R * cos(goc) y = y0 - R * sin(goc) }