Files
2026-03-10 23:42:21 -04:00

59 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MarketData.CNNProcessing
{
public class PointMapping
{
public PointMapping(double width,double height,double xDataExtent,double xDataExtentMin,double yDataExtent,double yDataExtentMin,double xMarginExtent=0.00,double yMarginExtent=0.00)
{
Width=width;
Height=height;
XMargin=xMarginExtent;
YMargin=yMarginExtent;
XDataExtent=xDataExtent;
XDataExtentMin=xDataExtentMin;
YDataExtent=yDataExtent;
YDataExtentMin=yDataExtentMin;
XScalingFactor=(Width-(XMargin*2.00))/(XDataExtent-XDataExtentMin);
YScalingFactor=(Height-(YMargin*2.00))/(YDataExtent-YDataExtentMin);
}
// MapPoint will both scale the given point and translate the given point from an upper left origin system to a bottom left origin system
public Point MapPoint(Point sourcePoint)
{
int x = (int)((sourcePoint.X - XDataExtentMin) * XScalingFactor + XMargin);
int y = (int)(Height - 1 - ((sourcePoint.Y - YDataExtentMin) * YScalingFactor) - YMargin);
// clamp to bounds
x = Math.Max(0, Math.Min(x, (int)Width - 1));
y = Math.Max(0, Math.Min(y, (int)Height - 1));
return new Point(x, y);
}
// TranslatePoint will only translate the given point from an upper left origin system to a bottom left origin system
public Point TranslatePoint(Point sourcePoint)
{
Point mappedPoint=new Point((int)sourcePoint.X,(int)(Height-sourcePoint.Y-1));
return mappedPoint;
}
public double Width{get;private set;}
public double Height{get;private set;}
public double XDataExtent{get;private set;}
public double XDataExtentMin{get;private set;}
public double XRange{get{return XDataExtent-XDataExtentMin;}}
public double YDataExtent{get;private set;}
public double YDataExtentMin{get;private set;}
public double YRange{get{return YDataExtent-YDataExtentMin;}}
public double XMargin{get;private set;}
public double YMargin{get;private set;}
public double XScalingFactor{get;private set;}
public double YScalingFactor{get;private set;}
}
}