该项目的基础是眼跟踪器。让我简要介绍一下这个项目背后的想法,以便更好地理解我的问题。
我有托比C眼追踪器的硬件。这个眼睛追踪器可以给出我所看到的X,Y坐标。但是这个装置非常敏感。当我看到一点,眼睛跟踪器会发出许多不同的坐标数据,但在± 100范围内,我发现。即使你盯着1点看,你的眼睛也一直在移动,因此给出了很多数据。然后将这许多数据(浮点数)保存在文本文件中。现在,我只需要一个数据(X坐标),它表示我所注视的一个点,而不是± 100范围内的许多数据,并将其移动到一个新的文本文件中。
我不知道该如何编码才能做到这一点。
这些是文本文件中的float编号。
200
201
198
202
250
278
310
315
360
389
500
568
579
590当我盯着第1点时,数据是200-300,它在± 100范围内。我希望将200设置为参考点,用下一个数字减去自身,并检查100中的结果值(如果是的话),删除它们。参考点应该继续对以下数字执行此操作,直到它到达± 100范围之外为止。一旦超出了100范围,现在这个数字是310,那么这个数字就是下一个参考点,并执行相同的操作,用下面的数字减去,并检查100中的结果值。一旦超出了100范围,下一个数字就是500,现在,这是新的参考点,并执行同样的操作。这就是我的目标。为了将其转换为更简单的术语,应该将参考点移到一个新文件中。
到目前为止,这是我的代码,它获取凝视坐标并将它们存储在文本文件中。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Tobii.Interaction;
namespace ConsoleApp1
{
class Program
{
private static void programintro()
{
Console.WriteLine("Press Any Keys To Start");
}
public static void Main(string[] args)
{
programintro();
Console.ReadKey();
double currentX = 0.0;
double currentY = 0.0;
double timeStampCurrent = 0.0;
double diffX = 0.0;
double diffY = 0.0;
int counter = 0;
var host = new Host();
host.EnableConnection();
var gazePointDataStream = host.Streams.CreateGazePointDataStream();
gazePointDataStream.GazePoint((gazePointX, gazePointY, timestamp) =>
{
diffX = gazePointX - currentX;
diffY = gazePointY - currentY;
currentX = gazePointX;
currentY = gazePointY;
timeStampCurrent = timestamp;
if (diffX > 100 || diffX <= -100 || diffY >= 100 || diffY <= -100)
{
counter++;
using (StreamWriter writer = new StreamWriter("C: \\Users\\Student\\Desktop\\FYP 2019\\ConsoleApp1\\ConsoleApp1\\Data\\TextFile1.txt", true))
{
writer.WriteLine("Recorded Data " + counter + "\n=================================================================================================================\nX: {0} Y:{1}\nData collected at {2}", currentX, currentY, timeStampCurrent);
writer.WriteLine("=================================================================================================================");
}
Console.WriteLine("Recorded Data " + counter + "\n=================================================================================================================\nX: {0} Y:{1}\nData collected at {2}", currentX, currentY, timeStampCurrent);
Console.WriteLine("=================================================================================================================");
}
});
//host.DisableConnection();
while (true)
{
if (counter < 10)
{
continue;
}
else
{
Environment.Exit(0);
}
}现在,我的问题是如何编码来读取文本文件,设置一个引用号,用下一个数字减去它自己,并检查
100中的结果值,如果它超出了± 100范围,它是否有一个新的引用号。然后,这些参考编号存储在一个新的文本文件中。
如果有一个代码示例,我将创建一个新的程序并存储在那里,并首先测试它。
发布于 2019-06-18 05:08:38
假设初始数据存在于列表中,则获取所有参考点的逻辑如下:
var initialData = new List<float> { 200,201,198,202,250,278,310,315,360,389,500,568,579,590 };
var lstReferencePoints = new List<float>();
var referencePoint = default(float);
foreach(var num in initialData)
{
if(referencePoint == default(float))
{
referencePoint = num;
}
if(Math.Abs(referencePoint - num) > 100)
{
lstReferencePoints.Add(referencePoint);
referencePoint = num;
}
}
lstReferencePoints.Add(referencePoint);lstReferencePoints包含referencePoints的列表。
编辑:将浮动数字从文本文件读取到列表
var pointsArray = File.ReadAllLines(your_file_path);
var initialData = new List<float>(pointsArray.Select(float.Parse));将lstReferencePoints 存储到新文本文件的:
using(TextWriter tw = new StreamWriter("newFile_Path"))
{
foreach (var item in lstReferencePoints)
tw.WriteLine(item);
}https://stackoverflow.com/questions/56640921
复制相似问题