2

Processing (처리)에서 로컬 상대 점을 월드 (화면) 공간으로 변환하는 좋은 방법은 무엇입니까?처리 중 월드 공간을 기준으로 변환

예를 들어 처리 PDE와 함께 제공되는 Flocking example을 가져 가십시오. Boid 클래스에 relativeToWorld 메서드와 worldToRelative 메서드를 어떻게 구현합니까? 이 메서드는 render 메서드에서 수행 된 모든 변환을 고려합니다.

것은 내가 PVector 객체를 변환 할 것입니다 생각, 그래서 메소드 서명은 같은 것을 볼 수 있습니다

PVector relativeToWorld(PVector relative) { 
    // Take a relative PVector and return a world PVector. 
} 

PVector worldToRelative(PVector world) { 
    // Take a world PVector and return a relative PVector. 
} 
+0

이 게시물이 당신을 위해 도움이 될 수 있습니다 : http://stackoverflow.com/questions/8339533/transform-screen-coordinates-to-model-coordinates – Justin

답변

2

불행하게도, 처리는 것들로 인생을 쉽게하지 않습니다. 그것은 변환 행렬에 대한 액세스를 제공하지 않으므로 수동 변환 행렬/벡터 승산을 사용해야한다고 생각합니다. 호기심이 있다면 프레임 간 변환 매트릭스를 동질성 표현으로 사용했습니다.

경고 : 이 만 (렌더링 방법으로) 하나의 회전한 번역이 가정되어 빠르게 자바 해석 티카 결과입니다. 번역은 PVector에 의해서만 제공됩니다.

PVector relativeToWorld(PVector relative) { 
    float theta = vel.heading2D() + PI/2; 
    float r00 = cos(theta); 
    float r01 = -sin(theta); 
    float r10 = -r01; 
    float r11 = r00; 
    PVector world = new PVector(); 
    world.x = relative.x * r00 + relative.y*r01 + loc.x; 
    world.y = relative.x * r10 + relative.y*r11 + loc.y; 
    return world; 
} 

PVector worldToRelative(PVector world) { 
    float theta = vel.heading2D() + PI/2; 
    float r00 = cos(theta); 
    float r01 = sin(theta); 
    float r10 = -r01; 
    float r11 = r00; 
    PVector relative = new PVector(); 
    relative.x = world.x*r00 + world.y*r10 - loc.x*r00 - loc.y*r10; 
    relative.y = world.x*r01 + world.y*r11 - loc.x*r01 - loc.y*r11; 
    return relative; 
} 
+0

모든 X 년대와 y의 올바른 코드에서? 그리고 마지막 몇 줄에서 친척을 설정하는 곳은 x 및 y 속성을 설정해야한다고 생각합니다. –

+0

relative.x/y가 수정되었습니다. 너에게 효과가 있니? 나는 지금 그것을 시험해 보았다. 그리고 그것은 잘하는 것처럼 보인다? 다시 말하지만, 최선의 해결책은 아닙니다. 단 하나의 번역과 회전으로 제한되기 때문입니다. – num3ric

+0

완벽하게 작동합니다. 테스트 할 시간이 필요했습니다. 테스트와 편집을 해주셔서 감사드립니다. –