2014-11-18 22 views
5

enter image description hereVòng tròn được vẽ chủ yếu trong X trục Y, TẠI SAO?

Tôi đã tạo vòng lặp bằng cách xử lý vẽ vòng tròn, hình dạng tổng thể phải là hình tròn. Tuy nhiên chúng chủ yếu được vẽ gần với trục X và Y. Tôi đã chọn ngẫu nhiên góc cho phép tính vị trí của nó, tôi không thể thấy được vấn đề ở đâu.

Mã như sau:

for (int omega = 0; omega<1080; omega++){ //loop for circle creation 
    radius = (int)random(80); //random radius for each circle 

    int color1= (int)random(100); //little variation of color for each circle 
    int color2= (int)random(100); 

     int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion 
     int locationX = (int)(cos(radians(omega))*random(width/2+1)); 
     fill(0,color1+200,color2+200,50); 
     ellipse(locationX,locationY,radius,radius); //draw circles 
    } 
+0

Bạn triển khai thực hiện ngẫu nhiên nào? Việc xây dựng bình thường trong đôi khi dễ bị các giá trị cụm. Hãy thử sử dụng một hạt giống khác hoặc thử thực hiện ngẫu nhiên khác. Có một vài người thực sự tốt. Hãy thử googling cho Mersenne Twister, nó là một thực sự tốt và bạn có thể tìm thấy nhiều triển khai cho java. –

+0

"Gần với trục X và trục Y" có nghĩa là gì? Bạn có thể cung cấp ảnh chụp màn hình không? Tải nó lên imgur. – Kevin

+0

Đính kèm với bài đăng – eneko

Trả lời

5

Tốt điểm @Durandal (+1)

Tuy nhiên tôi có một suy nghĩ nhiều hơn với vòng tròn ngẫu nhiên.

Khi bạn tạo khoảng cách ngẫu nhiên với mã ví dụ:

double distance = random(width/2 ); 

bạn ngẫu nhiên từ thống nhất phân phối. Ý tôi là tất cả các giá trị từ 0 đến width/2 đều có cùng xác suất. Nhưng khoanh tròn với bán kính 3*r có diện tích lớn hơn 9 lần rồi vòng tròn với bán kính r. Vì vậy, khoảng cách nhỏ hơn từ trung tâm, mật độ lớn hơn chúng ta có thể thấy.

Cách này tạo ra đám mâykhông có mật độ thống nhất như bạn có thể thấy trên hình ảnh đầu tiên. enter image description here

Nhưng nếu bạn thay đổi xác mật độ chức năng theo cách như vậy mà giá trị lớn hơn ít khả năng thu nhỏ hơn bạn có thể thống nhất được tạo ra đám mây.

như sửa đổi đơn giản:

double distance = Math.sqrt(random(width/2 * width/2)); 

sản xuất phân bố đều hơn vòng tròn, như bạn có thể nhìn thấy trên hình ảnh thứ hai. enter image description here

Tôi hy vọng điều này có thể hữu ích ..

+0

Điểm tốt và được minh họa rất độc đáo với hình ảnh +1 – Durandal

+0

Giải thích tuyệt vời cho bạn của tôi. Rất rất cảm ơn! – eneko

5

nó một artefact về cách bạn tính toán vị trí, bạn đang kéo hai giá trị ngẫu nhiên khác nhau cho các X và thành phần Y:

int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion 
int locationX = (int)(cos(radians(omega))*random(width/2+1)); 

Bạn nên sử dụng một giá trị ngẫu nhiên "khoảng cách" từ trung tâm cho cả X và Y, điều này sẽ xóa cụm sao về phía trục.

Các vấn đề liên quan