muszaki_informatika:raylib_vis_functions
This is an old revision of the document!
Szinusz függvény ábrázolása 2D-ben
Az alábbi rövid példa egy szinusz függvény ábrázolását mutatja.
#include <raylib.h>
#include <math.h>
int main() {
// Initialization
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "Sinus Function Plot - raylib");
SetTargetFPS(60); // Set FPS
while (!WindowShouldClose()) { // Main game loop
// Update
// Draw
BeginDrawing();
ClearBackground(RAYWHITE); // Clear the background
// Draw the axes
Vector2 origin = { (float)screenWidth/2, (float)screenHeight/2 };
DrawLine(origin.x, 0, origin.x, screenHeight, BLACK); // Y-axis
DrawLine(0, origin.y, screenWidth, origin.y, BLACK); // X-axis
// Draw the sine function
for(int i = -screenWidth/2; i < screenWidth/2; i++) {
// Calculating points
float x1 = (float)i;
float y1 = sinf(x1 * DEG2RAD) * 100; // Scale the sine wave
float x2 = x1 + 1;
float y2 = sinf(x2 * DEG2RAD) * 100; // Scale the sine wave
// Transform points to screen space
x1 += origin.x;
y1 = origin.y - y1; // Invert y1 to match screen coordinates
x2 += origin.x;
y2 = origin.y - y2; // Invert y2 to match screen coordinates
// Draw line segment
DrawLine(x1, y1, x2, y2, BLUE);
}
DrawText("Sinus Function Plot", 10, 10, 20, BLACK); // Title
DrawText("X-Axis", screenWidth - 50, origin.y + 10, 10, BLACK); // X-axis label
DrawText("Y-Axis", origin.x + 10, 10, 10, BLACK); // Y-axis label
EndDrawing();
}
CloseWindow();
return 0;
}
A következő példa egy kétváltozós függvényt sinf(sqrtf(x*x + y*y)) térben ábrázol
#include <raylib.h>
#include <math.h>
int main() {
// Initialization
const int screenWidth = 800;
const int screenHeight = 800;
InitWindow(screenWidth, screenHeight, "3D Sinus Function Plot - raylib");
// Define the camera
Camera camera = { 0 };
camera.position = (Vector3){ 20.0f, 20.0f, 20.0f };
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
camera.fovy = 45.0f;
SetTargetFPS(60);
while (!WindowShouldClose()) {
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode3D(camera);
for (float y = -8.0f; y < 8.0f; y += 0.2f) {
for (float x = -8.0f; x < 8.0f; x += 0.2f) {
float z = sinf(sqrtf(x*x + y*y)) * 2.0f; // Amplitude increase for better visualization
Vector3 pos = { x, z, y };
float colorIntensity = (z + 2.0f) / 4.0f; // Normalize z value to [0, 1] for color
Color color = ColorFromHSV(200.0f * colorIntensity, 0.8f, 0.8f);
DrawCubeV(pos, (Vector3){0.2f, 0.1f, 0.2f}, color);
}
}
DrawGrid(20, 1.0f);
EndMode3D();
DrawFPS(10, 10);
EndDrawing();
}
CloseWindow();
return 0;
}
Hogyan lehetne z tengely körül forgatni a függvényt?
Ahhoz, hogy a 3D-s sinus felület forogjon a Z tengely körül, frissíteni kell a kamerapozíciót a fő cikluson belül, hogy a kamera mozogjon a felület körül. A kamera mozgatásához polár koordinátákat használunk, és változtatjuk a kamera position vektorát a Z tengely körüli körpályán.
Viszont a számítógépes grafikában az y tengely a felfelé mutató vektor, ezért a kódban az x és z tengelyeket forgatjuk.
#include <raylib.h>
#include <math.h>
int main() {
// Initialization
const int screenWidth = 800;
const int screenHeight = 800;
InitWindow(screenWidth, screenHeight, "3D Sinus Function Rotating - raylib");
// Define the camera
Camera camera = { 0 };
camera.position = (Vector3){ 30.0f, 20.0f, 3.0f };
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
camera.fovy = 45.0f;
SetTargetFPS(60);
float angle = 0.0f;
while (!WindowShouldClose()) {
// Update camera position
angle += 0.01f; // Increment angle
camera.position.x = cosf(angle) * 30.0f;
camera.position.z = sinf(angle) * 30.0f;
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode3D(camera);
for (float y = -8.0f; y < 8.0f; y += 0.2f) {
for (float x = -8.0f; x < 8.0f; x += 0.2f) {
float z = sinf(sqrtf(x*x + y*y)) * 2.0f; // Amplitude increase for better visualization
Vector3 pos = { x, z, y };
float colorIntensity = (z + 2.0f) / 4.0f; // Normalize z value to [0, 1] for color
Color color = ColorFromHSV(200.0f * colorIntensity, 0.8f, 0.8f);
DrawCubeV(pos, (Vector3){0.2f, 0.1f, 0.2f}, color);
}
}
DrawGrid(20, 1.0f);
EndMode3D();
DrawFPS(10, 10);
EndDrawing();
}
CloseWindow();
return 0;
}
muszaki_informatika/raylib_vis_functions.1706463079.txt.gz · Last modified: 2024/01/28 17:31 by knehez
