tôi có mã này để tạo ra tiếng ồn 1D trong obj-c, nó làm việc hoàn toàn tốt:Perlin máy phát tiếng ồn trong Swift
- (float)makeNoise1D:(int)x {
x = (x >> 13)^x;
x = (x * (x * x * (int)_seed + 19990303) + 1376312589) & RAND_MAX;
return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & RAND_MAX)/1073741824.0);
}
Bây giờ tôi đang cố gắng để tái tạo nó trong Swift, nhưng nó luôn luôn thất bại và hiển thị EXEC_BAD_INSTRUCTION khi trở về. Đây là cách nó trông giống như bây giờ, tôi đã phải nhổ biểu thức cuối cùng, nhưng tôi khá chắc chắn đó không phải là vấn đề.
func makeNoise1D(var x : Int) -> Float{
x = (x >> 13)^x;
x = (x * (x * x * seed! + 19990303) + 1376312589) & 0x7fffffff
var inner = (x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff
return (1.0 - (Float(inner))/1073741824.0)
}
Tôi đã thử nhiều phôi khác nhau và chia thành các biểu thức phụ nhưng vẫn không thành công. Điều duy nhất tôi đã tìm ra rằng đầu tiên và dòng cuối cùng hoạt động. (Hầu hết các trường hợp thử nghiệm x của tôi được đặt thành 20 và hạt giống thành 10, chỉ để làm cho nó đơn giản)
Cảm ơn sự giúp đỡ!
bạn đã bao giờ nghĩ về việc sửa đổi phương pháp này để chấp nhận một phao, thay vì một Int, như một tham số? – Kat