Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
    • Help
    • Support
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
M
man-in-the-mirror
  • Project
    • Project
    • Details
    • Activity
    • Releases
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 4
    • Issues 4
    • List
    • Boards
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • MIM
  • man-in-the-mirror
  • Wiki
    • 세부기획
  • 거짓탄 로직

거짓탄 로직

Last edited by 18류지석 Apr 06, 2019
Page history
This is an old version of this page. You can view the most recent version or browse the history.

변수 및 함수

  • cell: 칸, ver: 세로 벽, hor: 가로 벽

    • cell[x, y]: ver[x, y] ver[x+1, y] hor[x, y] hor[x, y+1]로 둘러싸임

    모든 오브젝트(칸, 벽)에 대해 [x, y]의 인덱스를 가질 때, 그것은 해당 오브젝트의 좌하단의 실제 좌표이다.

  • Vector2Int pos: (x,y) 현재 발사자가 서 있는 위치의 칸 인덱스

  • Vector2 stPos: (x,y) = pos + (0.5, 0.5) 발사자의 실제 위치

  • MirrorInfo tarMir: 적중된 거울 정보

    • tarMir.pos: 거울의 좌하단 좌표
    • tarMir.len: 거울의 길이
    • tarMir.dir: 거울의 방향, ver 혹은 hor
  • list<pair<float, float> > parRay: 현재 단계에서 나아가고 있는 빛줄기

    • 초기설정: {(0,1)}

    • void SubtractRay(list<pair<float, float> >parRay, pair<float, float> sub)

      parRay에서 sub만큼을 빼는 것

      • parRay의 모든 원소에 대해 parRay[].first, parRay[].second, sub.first, sub.second를 float[4] arr에 넣고 오름차순 정렬
        • arr[0] == sub.first && arr[1] == sub.second || arr[2] == sub.first && arr[3] == sub.second
          • continue
        • arr[0] == sub.first && arr[2] == sub.second
          • parRay[].first = sub.second
        • arr[1] == sub.first && arr[3] == sub.second
          • parRay[].second = sub.first
        • arr[1] == sub.first && arr[2] == sub.second
          • Add(parRay[].second, sub.second)
          • parRay[].second = sub.first
    • bool IsInRay(list<pair<float, float> >parRay, pair <float, float> range)

      parRay에 range가 포함되는지 체크

      • parRay의 모든 원소에 대해 parRay[].first, parRay[].second, range.first, range.second를 float[4] arr에 넣고 오름차순 정렬
        • return !(arr[0] == range.first && arr[1] == range.second || arr[2] == range.first && arr[3] == range.second);
    • float PointToParRay(Vector2 stPos, MirrorInfo tarMir, Vector2 chPos, bool isRefl)

      좌표를 parRay에서 몇인지 계산 stPos: 발사자 좌표, tarMir: 거울정보, chPos: 구하고자 하는 좌표, isRefl: 거울에 반사된 이후 값을 구하는지 tarMir.dir == hor일 경우만 기술

      • float dist = chPos.y - stPos.y + isRefl?(tarMir.pos.y - chPos.y)*2:0;
        • stPos에서 chPos 까지의 거리
      • float spreadLen = tarMir.len * dist / (tarMir.pos.y - stPos.y);
      • float rayStPos = stPos.x + (tarMir.pos.x - stPos.x) * dist / (tarMir.pos.y - stPos.y);
      • return
Clone repository
  • Home
  • 세부기획
  • 세부기획
    • 거짓탄 로직
More Pages

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.