Octave Atelier

코드와 해설을 함께 읽는 학습 문서

Code Detail

load_obj

Control & Dynamics + Data I/O 중심의 Octave 학습 예제

course/basic/load_obj.m

목록으로

코드를 복사해 Octave에서 바로 실행할 수 있습니다.

카테고리

Course Basic

course-basic

코드 길이

50

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load

함수 시그니처

function [V, F] = load_obj(filename)

전체 코드

50 lines

function [V, F] = load_obj(filename)
    # read obj
    # input:
    #   filename - obj file path
    # output:
    #   V - vertex matrix [N, 3]
    #   F - face matrix [M, 3]

    fid = fopen(filename, "r");

    init_capacity = 10000;

    V = zeros(init_capacity, 3);
    F = zeros(init_capacity, 3);

    v_count = 0;
    f_count = 0;

    while ~feof(fid)
        line = strtrim(fgetl(fid));
        if startsWith(line, "v ")
            vals = sscanf(line(3:end), "%f %f %f");  # [3, 1]
            v_count += 1;
            if v_count > size(V, 1)
                V = [V; zeros(size(V))];  # double capacity
            end
            V(v_count, :) = transpose(vals);
            if mod(v_count, 10000) == 0
                printf("Loaded %d vertices\n", v_count);
            end
        elseif startsWith(line, "f ")
            idx = sscanf(line(3:end), "%d %d %d");  # [3, 1]
            f_count += 1;
            if f_count > size(F, 1)
                F = [F; zeros(size(F))];  # double capacity
            end
            F(f_count, :) = transpose(idx);
            if mod(f_count, 10000) == 0
                printf("Loaded %d faces\n", f_count);
            end
        end
    end
    fclose(fid);

    # trim to actual size
    V = V(1:v_count, :);
    F = F(1:f_count, :);

end

코드 해설

목적

  • Control & Dynamics + Data I/O 중심의 Octave 학습 예제

입력

  • 파라미터: filename

출력

  • 반환값: V
  • 반환값: F
  • 콘솔 텍스트 출력

실행 흐름

  1. 데이터 준비
  2. 출력 및 저장

핵심 함수

  • size
  • zeros
  • line
  • mod
  • printf
  • sscanf
  • startsWith
  • transpose

실습 과제

  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 핵심 함수 size의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
  • "데이터 준비 -> 출력 및 저장" 흐름을 함수 단위로 분리해 리팩터링해보세요.

같은 카테고리 코드

이전 코드 load_mesh 다음 코드 merge_params