Skip to content

Instantly share code, notes, and snippets.

@obedrios
Created April 17, 2023 01:11
Show Gist options
  • Save obedrios/697a3e7babca67efbb541c90c19c051b to your computer and use it in GitHub Desktop.
Save obedrios/697a3e7babca67efbb541c90c19c051b to your computer and use it in GitHub Desktop.
Single Source Radial Wave Simulations
// Parameters
int N = 500; // Grid size
float lambda = 10; // Wavelength
float k = 2 * PI / lambda; // Wave number
float A = 100; // Amplitude
// Source position
int[] source = {N/2, N/2};
// Grid and wave array
float[][] R = new float[N][N];
float[][] wave = new float[N][N];
void setup() {
size(800, 800, P3D);
calculateDistance();
calculateWave();
}
void draw() {
background(255);
translate(width/2, height/2);
rotateX(radians(60));
rotateZ(PI/4);
drawWave();
}
void calculateDistance() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
R[i][j] = sqrt(pow(i - source[0], 2) + pow(j - source[1], 2));
}
}
}
void calculateWave() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
wave[i][j] = A * sin(k * R[i][j]);
}
}
}
void drawWave() {
float scaleFactor = 2;
float zFactor = 0.5;
for (int i = 0; i < N-1; i++) {
beginShape(TRIANGLE_STRIP);
for (int j = 0; j < N; j++) {
float x1 = (i - N/2) * scaleFactor;
float y1 = (j - N/2) * scaleFactor;
float z1 = wave[i][j] * zFactor;
float x2 = (i + 1 - N/2) * scaleFactor;
float y2 = (j - N/2) * scaleFactor;
float z2 = wave[i + 1][j] * zFactor;
// Color mapping
float hue = map(z1, -A, A, 0, 255);
fill(hue, 255, 255);
vertex(x1, y1, z1);
vertex(x2, y2, z2);
}
endShape();
}
}
// Parameters
int N = 500; // Grid size
float lambda = 10; // Wavelength
float k = 2 * PI / lambda; // Wave number
float A = 1; // Amplitude
// Source position
int[] source = {N/2, N/2};
// Grid and wave array
float[][] R = new float[N][N];
float[][] wave = new float[N][N];
void setup() {
size(500, 500);
calculateDistance();
calculateWave();
}
void draw() {
background(255);
drawWave();
}
void calculateDistance() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
R[i][j] = sqrt(pow(i - source[0], 2) + pow(j - source[1], 2));
}
}
}
void calculateWave() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
wave[i][j] = A * sin(k * R[i][j]);
}
}
}
void drawWave() {
loadPixels();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
float brightness = map(wave[i][j], -A, A, 0, 255);
color c = color(brightness);
int index = i + j * width;
if (index < pixels.length) {
pixels[index] = c;
}
}
}
updatePixels();
}
// Parameters
int N = 500; // Grid size
float lambda = 10; // Wavelength
float k = 2 * PI / lambda; // Wave number
float A = 1; // Amplitude
float speed = 0.1; // Speed of the animation
// Source position
int[] source = {N/2, N/2};
// Grid and wave array
float[][] R = new float[N][N];
float[][] wave = new float[N][N];
float t = 0;
void setup() {
size(500, 500);
calculateDistance();
}
void draw() {
background(255);
calculateWave();
drawWave();
t += speed;
}
void calculateDistance() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
R[i][j] = sqrt(pow(i - source[0], 2) + pow(j - source[1], 2));
}
}
}
void calculateWave() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
wave[i][j] = A * sin(k * R[i][j] - k * t);
}
}
}
void drawWave() {
loadPixels();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
float brightness = map(wave[i][j], -A, A, 0, 255);
color c = color(brightness);
int index = i + j * width;
if (index < pixels.length) {
pixels[index] = c;
}
}
}
updatePixels();
}
// Parameters
int N = 100; // Grid size (reduced for better performance)
float lambda = 10; // Wavelength
float k = 2 * PI / lambda; // Wave number
float A = 50; // Amplitude
float speed = 0.1; // Speed of the animation
// Source position
int[] source = {N/2, N/2};
// Grid and wave array
float[][] R = new float[N][N];
float[][] wave = new float[N][N];
float t = 0;
void setup() {
size(800, 800, P3D);
calculateDistance();
}
void draw() {
background(255);
translate(width/2, height/2);
rotateX(radians(60));
rotateZ(PI/4);
calculateWave();
drawWave();
t += speed;
}
void calculateDistance() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
R[i][j] = sqrt(pow(i - source[0], 2) + pow(j - source[1], 2));
}
}
}
void calculateWave() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
wave[i][j] = A * sin(k * R[i][j] - k * t);
}
}
}
void drawWave() {
float scaleFactor = 4;
float zFactor = 1;
for (int i = 0; i < N-1; i++) {
beginShape(TRIANGLE_STRIP);
for (int j = 0; j < N; j++) {
float x1 = (i - N/2) * scaleFactor;
float y1 = (j - N/2) * scaleFactor;
float z1 = wave[i][j] * zFactor;
float x2 = (i + 1 - N/2) * scaleFactor;
float y2 = (j - N/2) * scaleFactor;
float z2 = wave[i + 1][j] * zFactor;
// Color mapping
float hue = map(z1, -A, A, 0, 255);
fill(hue, 255, 255);
vertex(x1, y1, z1);
vertex(x2, y2, z2);
}
endShape();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment