2014-03-05 3 views
0

나는 키포인트와 대응하는 RGB의지도는 내부 표현이 다른 조회 테이블에 가장 적합한 패턴은 무엇입니까? 옵저버 패턴?

또는

  • 3 개 채널 (빨강, 녹색, 파랑) 값

    • 입력으로 얻을 내 자신의 클래스 LookupTable의를 쓰기 각 채널에는 해당 채널에 대한 키포인트와 해당 키포인트의 해당 값이 빨간색, 녹색 및 파란색으로 표시됩니다.

    LookupTable 클래스는 다른 데이터 구조에서 다르게 구성 될 수 있습니다.

    1. map<point, pixel> 
    2. vector<pixel> 
    3. struct my{ 
        map<float, value> red; 
        map<float, value> green; 
        map<float, value> blue; } 
    

    LookupTable의 클래스가 1 또는 32 항상 그러므로 계산 그들에 "따라"되어 구성 될 수 있습니다 나는 3 개 내부 데이터 구조를 유지.

    문제 :

    1. 는 어떻게 알 수 있습니까있는 데이터 구조 (1 또는 3) 내가 2을 계산해야부터?
    2. 처음으로 1을 입력 한 경우 3을 입력하고 내 수업에서 진행되고있는 작업을 추적하는 방법은 무엇입니까? 옵저버 패턴이 잔인한 것처럼 보입니다 ...
    3. 직접 솔루션 - 여러 개의 부울을 사용하는 것은 좋지 않습니다. 앞으로도 계속 유지하고 새로운 데이터 표현을 추가하기가 어렵습니다.
    4. 이상적으로,

    construct(map<point, pixel>) 또는

    construct(struct my) 
    

    요구 한 번만 실행하고이 호출되는 다른 시간 - 단지 (그 방법 대신 생성자의있는 값

    를 반환 어느 쪽이 비공개인가)

답변

0

구현 방법은 한 가지 밖에 없습니다. 동일한 목적을 달성하기 위해 다른 구조를 저장할 필요가 없습니다. 공개 API를 통해 사용자에게 두 개의 정면을 제시하면됩니다. (즉, 더 자세한 설명이 될 것 같은 방법에 의해 끔찍한 이름 ... ColourPanel 또는 무언가)

다음
class pixel{ 
    float red, green, blue; 
    pixel(float, float, float); 
    float getRed(); 
    ... 
} 

당신의 LookupTable의 :

class LookupTable{ 
    std::map<point, pixel> pointColours; 
    void colourThePoint(point, pixel); 
    void colourThePoint(point, float, float, float); 
    // the pixel returned gives them "getRed" "getGreen" etc... 
    // So Don't Repeat Yourself (DRY) by replicating that functionality here. 
    pixel getThePointColout(point); 
    void applyManipulation(std::function<void(pixel)> manip) { 
    std::for_each(pointColours.begin(), pointColours.end(), manip); 
    } 
    ... 
} 
pixel 가정

는 (의사 코드 경고)과 같이 보입니다

귀하의 의견을 바탕으로 나는 요소에 조작 기능을 적용하는 방법을 추가했습니다.

void colourMePurple(pixel& original){ 
    pixel.increaseBlue(32).increaseRed(32).decreaseGreen(32); 
} 

을 그리고 다음과 같이 사용됩니다 : 그 조작 기능은 다음과 같이 보일 수

LookupTable myColours; 
... 
myColours.applyManipulation(colourMePurple); 
+0

I 1.지도를 모두 유지하는 이유 <포인트, 픽셀> 및 3. 구조체 내를 { map 빨강; map 녹색; map blue; } 이러한 채널 내에서 선형, 등등 ... 성장할 각 채널에 대해 서로 다른 "규칙"/ 수학 함수가있을 수 있습니다. – Oleksandra

+0

@Oleksandra 픽셀에 조작을 적용해야하는 필요성을 극복하기위한 제안을 참조하십시오. – Dennis