File size: 1,379 Bytes
be99550
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// ๐ŸŒŠ ์™ธ๋ถ€ ์‹ค์‹œ๊ฐ„ ์‹ ํ˜ธ ๋ฐ ํŒŒ๋™ ์ฃผ์ž… ๋ชจ๋“ˆ (src/live_streamer.rs)
use std::f32::consts::PI;

pub struct LiveSignalStreamer {
    pub time: f32,
    pub frequency: f32,
}

impl LiveSignalStreamer {
    pub fn new(freq: f32) -> Self {
        LiveSignalStreamer { time: 0.0, frequency: freq }
    }

    /// ์‹ค์‹œ๊ฐ„ ์‹œ๊ณ„์—ด ๊ณ ์กฐํŒŒ(Harmonics) ์‹ ํ˜ธ ์ƒ์„ฑ
    pub fn generate_harmonic_wave(&mut self, size: usize) -> Vec<f32> {
        self.time += 0.05;
        let mut wave = Vec::with_capacity(size * size);
        for y in 0..size {
            for x in 0..size {
                let dx = (x as f32) / (size as f32) * 2.0 - 1.0;
                let dy = (y as f32) / (size as f32) * 2.0 - 1.0;
                let dist = (dx * dx + dy * dy).sqrt();
                
                // ์ค‘์‹ฌ์—์„œ ํผ์ ธ๋‚˜๊ฐ€๋Š” ์‚ฌ์ธํŒŒ + ๊ณ ์ฃผํŒŒ ๊ฐ„์„ญ
                let signal = (dist * self.frequency * 2.0 * PI - self.time * 5.0).sin() * 0.8;
                wave.push(signal);
            }
        }
        wave
    }

    /// ํŠน์ • ์ขŒํ‘œ์— ์ˆœ๊ฐ„์ ์ธ ์™ธ๋ถ€ ์—๋„ˆ์ง€ ์ถฉ๊ฒฉํŒŒ(Impulse) ์ฃผ์ž…
    pub fn inject_shockwave(grid: &mut [f32], size: usize, center_x: usize, center_y: usize, energy: f32) {
        if center_x < size && center_y < size {
            let idx = center_y * size + center_x;
            grid[idx] += energy;
        }
    }
}