четверг, 22 апреля 2010 г.

мультитач на резистивных экранах

собственно на ютьюбе выложили ролик демонстрирующий мультитач.
Забавно, какой-то программист сделал своё SDK(лежит тут )

При осмотре видим, что:
  • Requres .Net Compat Framework 3.5,
  • Single Finger sliding causes zoom IN (notice that you CANNOT zoom OUT)
Это толкает на мысли..

исходников на хда не нашел, зато, это чудо-эсдека легко рефлектором вскрывается и:

public DualTouchSDK()// конструктор
{
this.xStart = 0;
this.yStart = 0;
this.StartIsSet = false;
this.xAvg = 0;
this.yAvg = 0;
this.AvgIsSet = false;
this.xEnd = 0;
this.yEnd = 0;
this.length1 = 0.0;
this.length2 = 0.0;
this.Tollerance = 50;// особенно милая  константа
}
//без коментариев видно что к чему:
private double getlength(int x1, int y1, int x2, int y2)
{
return Math.Abs(Math.Sqrt(Math.Pow((double) (x2 - x1), 2.0) +  Math.Pow((double) (y2 - y1), 2.0)));
}
// ба так это взятие  середины(вот она математика сложная, как посчитать длину вектора, ага)
//  дальше идем:
public void SetMouseDown(int x, int y)
{
if  (!this.StartIsSet)
{
this.xStart = x;// зафиксировали  координаты
this.yStart = y;
this.StartIsSet =  true;// флаг выставили что палец ткнулся
Console.WriteLine("Fixed Start");
}
}
//запоминание  начальной координаты
// а вот и поехали:
public void  SetMouseMove(int x, int y)
{
if (!this.AvgIsSet &&  (this.getlength(this.xStart, this.yStart, x, y) >= (this.Tollerance /  2)))
{
this.xAvg = x;
this.yAvg = y;
this.AvgIsSet = true;
this.xEnd = Math.Abs((int) ((2 *  this.xAvg) - this.xStart));
this.yEnd = Math.Abs((int) ((2 *  this.yAvg) - this.yStart));
this.length1 =  this.getlength(this.xStart, this.yStart, this.xEnd, this.yEnd);
Console.WriteLine("Fixed Avg");
}
if (this.AvgIsSet  && (this.Zooming != null))
{
int num2 =  Math.Abs((int) ((2 * x) - this.xStart));
int num3 =  Math.Abs((int) ((2 * y) - this.yStart));
double num4 =  this.getlength(this.xStart, this.yStart, num2, num3);
if  (num4 >= this.Tollerance)
{
this.xEnd =  num2;
this.yEnd = num3;
this.length2 =  num4;
double num5 = this.length2 / this.length1;
MultiTouchEventArgument argument2 = new  MultiTouchEventArgument();
argument2.x1 = this.xStart;
argument2.y1 = this.yStart;
argument2.x2 =  this.xEnd;
argument2.y2 = this.yEnd;
argument2.ZoomRatio = num5;
MultiTouchEventArgument e =  argument2;
this.Zooming(e);
}
}
}
//  а тут палец отпустили:
public void MouseUp()
{
this.StartIsSet = false;
this.AvgIsSet = false;
}

Вот такое вот лжепрограммное обеспечение

Комментариев нет:

Отправить комментарий