如何编写危险感知考试代码
How to a code a hazard perception exam
我一直在网上寻找有关如何对危险感知考试进行编码的示例,但无济于事。谁能告诉我危险感知考试编码的要点?或者网上有没有类似的例子?
在英国,危险感知考试是获得驾驶执照的必修考试。它涉及从驾驶员的角度观看视频,如果您发现危险,请点击视频。考试会记录您注意到的危险数量,并会给您一个分数,例如45 分中的 40 分。这里有一个示例:http://theory-test-online.co.uk/free-hazard-perception-test-demo.htm 我想了解如何记录针对视频的点击次数。咔嗒声还必须在危险周围的特定时间范围内击中才能算作正确。
这个问题既很笼统又很具体。它是通用的,因为您的目标可以通过多种方式实现,而具体是因为您询问的是一种非常具体的考试类型。以下是一些帮助您入门的信息:
您可以使用HTML5 video or something like Video.js播放视频并控制其位置。
您可以使用 addEventListener or jQuery .click() 监听点击事件,并在每次点击时检查当前视频位置,看看它是否在点击应该出现的范围之一,并相应地计算点数(添加用户应该单击并减去的点,确保你不会为每个危险获得超过 1 分)。
计算点数可能具有挑战性,但这是如何完成的:
假设您有一系列正确的危险开始-停止间隔,以及是否点击了其中任何一个的信息,以及在没有危险时点击的罚分数:
var harards, penalties;
hazards = [
{
start: 1,
stop: 2,
passed: false
},
{
start: 4,
stop: 5,
passed: false
},
{
start: 8,
stop: 10,
passed: false
}
];
penalties = 0;
(当然,对于真实数据,它更像是:start: 38.8, stop: 42.3
等)现在每次点击你都可以检查视频位置并用这样的东西测试它:
function testHazard(time) {
var i;
for (i = 0; i < hazards.length; i++) {
if (time >= hazards[i].start && time <= hazards[i].stop) {
hazards[i].passed = true;
return;
}
}
penalties++;
}
如果点击在其持续时间内,它将把所有危险标记为已通过,否则会增加惩罚。
现在点数很简单:
function countPoints() {
var i, points = 0;
for (i = 0; i < hazards.length; i++) {
if (hazards[i].passed) {
points++;
}
}
return (points - penalties);
}
参见:DEMO 关于 JS Bin。
一个额外的提示:您可能想要使用 mousedown event (or jQuery .mousedown()) instead of the click event to make it work nicely with double clicks etc. For example the exam from your comment 似乎不能很好地处理双击和多次点击并打印:"You responded to this clip in an unacceptable manner!" 另外我不确定该考试是否重要正确的点击。我上面写的代码对于任意数量的点击都可以正常工作,并且当人们在不应该点击时点击时只会导致较低(甚至负)的点数,同时将一次危险期间的任意点击次数计为一分。
一些有用的资源:
我一直在网上寻找有关如何对危险感知考试进行编码的示例,但无济于事。谁能告诉我危险感知考试编码的要点?或者网上有没有类似的例子?
在英国,危险感知考试是获得驾驶执照的必修考试。它涉及从驾驶员的角度观看视频,如果您发现危险,请点击视频。考试会记录您注意到的危险数量,并会给您一个分数,例如45 分中的 40 分。这里有一个示例:http://theory-test-online.co.uk/free-hazard-perception-test-demo.htm 我想了解如何记录针对视频的点击次数。咔嗒声还必须在危险周围的特定时间范围内击中才能算作正确。
这个问题既很笼统又很具体。它是通用的,因为您的目标可以通过多种方式实现,而具体是因为您询问的是一种非常具体的考试类型。以下是一些帮助您入门的信息:
您可以使用HTML5 video or something like Video.js播放视频并控制其位置。
您可以使用 addEventListener or jQuery .click() 监听点击事件,并在每次点击时检查当前视频位置,看看它是否在点击应该出现的范围之一,并相应地计算点数(添加用户应该单击并减去的点,确保你不会为每个危险获得超过 1 分)。
计算点数可能具有挑战性,但这是如何完成的:
假设您有一系列正确的危险开始-停止间隔,以及是否点击了其中任何一个的信息,以及在没有危险时点击的罚分数:
var harards, penalties;
hazards = [
{
start: 1,
stop: 2,
passed: false
},
{
start: 4,
stop: 5,
passed: false
},
{
start: 8,
stop: 10,
passed: false
}
];
penalties = 0;
(当然,对于真实数据,它更像是:start: 38.8, stop: 42.3
等)现在每次点击你都可以检查视频位置并用这样的东西测试它:
function testHazard(time) {
var i;
for (i = 0; i < hazards.length; i++) {
if (time >= hazards[i].start && time <= hazards[i].stop) {
hazards[i].passed = true;
return;
}
}
penalties++;
}
如果点击在其持续时间内,它将把所有危险标记为已通过,否则会增加惩罚。
现在点数很简单:
function countPoints() {
var i, points = 0;
for (i = 0; i < hazards.length; i++) {
if (hazards[i].passed) {
points++;
}
}
return (points - penalties);
}
参见:DEMO 关于 JS Bin。
一个额外的提示:您可能想要使用 mousedown event (or jQuery .mousedown()) instead of the click event to make it work nicely with double clicks etc. For example the exam from your comment 似乎不能很好地处理双击和多次点击并打印:"You responded to this clip in an unacceptable manner!" 另外我不确定该考试是否重要正确的点击。我上面写的代码对于任意数量的点击都可以正常工作,并且当人们在不应该点击时点击时只会导致较低(甚至负)的点数,同时将一次危险期间的任意点击次数计为一分。
一些有用的资源: