@SergeySerge11

Как реализовать клеточную камеру для просмотра?

Запутался, не понимаю, как реализовать камеру. с минимальными и максимальными размерами клеток по 2 стратегиям Unifrorm UniformToFill( макс размер вся секта, или до
макс стороны), с плавным и клеточным перемещением(канвас всегда с целой клетки рисуется),
interface ICellCamera{
void Scale(float scaleFactor){ }
void Scale(float scaleFactor,float pointX,float pointY){ }
void Translate(float dx,float dy){}
 //установить размер области просмотра канваса SizeChanged
void SetViewport(float w,float h);  
}

камера должна возвращать область видимости для отрисовки. Может есть другие решения, не могу найти не один пример.
Пример использования.
Camera camera=new Camera(100,100);
Color[,]colors=new Color[100,100];
//....
camera.SetViewport(w,h);
Translate(camera.TranslateX,camera.TranslateY);  
 // то же что и Offset, но  на (ViewRows-(int)ViewRows)*cellHeight меньше.(gплавное перемещение)
//  float  ViewRows => CanvasHeight/CellHeight;
float dx=camera.CellSize;
float dy=camera.CellSize;
float begX=camera.OffsetX;
float begY=camera.OffsetY;
float endX=camera.GetLastViewX();
float endY=camera.GetLastViewY();
for(float y=begY;y<endY;y+=dy)
   for(float x=begX;x<endX;x+=dx) 
   {
      var indexY=camera.GetIndexByPosY(y):
       var indexX=camera.GetIndexByPosX(x)
        // все что камера должна делать Это вернуть эту клетку. 
       var c=colors[indexX,indexY];  
       drawRect(x,y,dx,dy,c);  
   }

Вроде простая задача, но не получается, тонны ошибок. От сложений float типа dx+dx+dx!=3*dx и куча всего. 3 раза пытаюсь по 300 строк кода уходит, и начинаю путатся, (типа забываю и путаю назначение свойств, порядок операций, прочие нежданчики).
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы