Compare commits

...

2 Commits

Author SHA1 Message Date
1b45c515d4 différence M1 - M2 2025-12-29 16:57:16 +01:00
ebd2ba2e51 interferences réalistes 2025-12-29 16:40:55 +01:00
3 changed files with 23 additions and 19 deletions

View File

@ -47,27 +47,23 @@ void main() {
float relX = (pixelX - center.x) * zoom;
float relY = (pixelY - center.y) * zoom;
// r^2
float radiusSq = relX * relX + relY * relY;
// Diff de marche lamme d'air 2 * e cos(i) mais petits angles => cos(i) ~ 1 - i^2/2 mais i ~ r/f et r^2 = x^2 + y^2
float ringFactorBase = radiusSq * 0.065;
// Diff de marche du au coin d'air
float wDelta = (relX * angleM1 + relY * angleM1_Y) * 200.0;
float currDeltaBase = deltaLnm + wDelta;
float cosFactor = 1.0 - (radiusSq * 0.000004);
float currDelta = deltaLnm - ringFactorBase + wDelta;
float currDelta = (deltaLnm * cosFactor) + wDelta;
vec3 accumColor = vec3(0.0);
for(int i = 0; i < 10; i++) {
if (i >= lambdasCount) break;
if (i >= lambdasCount) break;
float l = lambdas[i];
if (l < 1.0) l = 550.0;
vec3 baseColorVec = WavelengthToRGB(l);
float currDelta = currDeltaBase - ringFactorBase;
float K = PI / l;
float phase = currDelta * K;
float intensity = cos(phase);

View File

@ -45,9 +45,12 @@ void main() {
float relY = (pixelY - center.y) * zoom;
float radiusSq = relX * relX + relY * relY;
float ringFactorBase = radiusSq * 0.065;
float wDelta = (relX * angleM1 + relY * angleM1_Y) * 200.0;
float currDeltaBase = deltaLnm + wDelta;
float cosFactor = 1.0 - (radiusSq * 0.000004);
float currDelta = (deltaLnm * cosFactor) + wDelta;
vec3 accumColor = vec3(0.0);
@ -55,15 +58,16 @@ void main() {
if (i >= lambdasCount) break;
float l = lambdas[i];
if (l < 1.0) l = 550.0;
vec3 baseColorVec = WavelengthToRGB(l);
float currDelta = currDeltaBase - ringFactorBase;
float K = PI / l;
float phase = currDelta * K;
float intensity = cos(phase);
intensity = intensity * intensity;
intensity = intensity * intensity;
accumColor += baseColorVec * intensity;
}

16
main.c
View File

@ -377,20 +377,24 @@ void DrawControlPanel(Michelson *mic) {
int rows = (mic->lambdasCount + cols - 1) / cols;
startY += (rows * (btnH + 5)) + 20;
// Pos M1
// Pos M1 M2 (d1 - d2)
startY += 0;
DrawText(TextFormat("Position M1 : %.2f um", mic->d1), startX, startY, 20, ORANGE);
float currentDiff = mic->d1 - mic->d2;
DrawText(TextFormat("Distance M1 - M2: %.2f um", currentDiff), startX, startY, 20, ORANGE);
// Pas des + et -
float stepD1 = speedMode ? 0.05f : 0.006f;
if (GuiButtonRepeat((Rectangle){startX, startY + 30, btnSize, 25}, "-", shouldRepeat)) mic->d1 -= stepD1;
GuiSlider((Rectangle){startX + btnSize + 5, startY + 30, sliderWidth - 75, 25}, NULL, NULL, &mic->d1, 100, 600);
float sliderVal = currentDiff;
GuiSlider((Rectangle){startX + btnSize + 5, startY + 30, sliderWidth - 75, 25}, NULL, NULL, &sliderVal, -100.0f, 100.0f);
mic->d1 = mic->d2 + sliderVal;
if (GuiButtonRepeat((Rectangle){startX, startY + 30, btnSize, 25}, "-", shouldRepeat)) mic->d1 -= stepD1;
if (GuiButtonRepeat((Rectangle){startX + btnSize + sliderWidth - 65, startY + 30, btnSize, 25}, "+", shouldRepeat)) mic->d1 += stepD1;
if (GuiButton((Rectangle){startX + contentWidth - 60, startY + 30, 60, 25}, "Egal")) mic->d1 = mic->d2;
// Angle M1 X
startY += 90;
DrawText(TextFormat("Inclinaison M1: %.3f deg", mic->angleM1), startX, startY, 20, ORANGE);
@ -571,7 +575,7 @@ int main () {
#endif
mic.center = (Vector2){ UI_WIDTH + (1920 - UI_WIDTH) / 2.0f - 100, 1080 / 2.0f };
mic.d1 = 250.0f;
mic.d1 = 265.0f;
mic.d2 = 250.0f;
mic.lambdas[0] = 550.0f;
mic.lambdasCount = 1;