コード例 #1
0
ファイル: HaikuStudyController.cs プロジェクト: solson/DSAE
        public bool areCrossing(Point location1, Point location2, out PointF? intersection)
        {
            Utilities.Segment line1 = new Utilities.Segment();
            line1.Start = Program.user1Origin;
            line1.End = location1;
            Utilities.Segment line2 = new Utilities.Segment();
            line2.Start = Program.user2Origin;
            line2.End = location2;
            intersection = Utilities.areSegmentsIntersecting(line1, line2);

            if (intersection != null)
                return true;

            return false;
        }
コード例 #2
0
ファイル: HaikuStudyController.cs プロジェクト: solson/DSAE
            public MainLogEntry(Point mouse1Location, Point mouse2Location, bool is1Down, bool is2Down, 
                string conditionOrder, int newSessionID, HaikuStudyCondition newCondition, bool areBlocked)
            {
                timestamp = (DateTime.Now - new DateTime (1970, 1, 1)).TotalMilliseconds;
                sessionID = newSessionID;
                currentCondition = newCondition;
                secondsSinceBeginning = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds;

                currentBlobIntersectionArea = Program.mainForm.blobOverlap;
                user1AtFault = Program.mainForm.user1AtFault ? 1 : 0;
                user2AtFault = Program.mainForm.user2AtFault ? 1 : 0;

                mouse1 = mouse1Location;
                mouse2 = mouse2Location;
                if (positionTwoAreaRectangle.Contains(mouse1Location))
                {
                    isUser1Invading = 1;
                    isUser1OnAPaper = 1;
                }
                else if (positionTwoAreaRectangle.Contains(mouse2Location))
                    isUser2OnAPaper = 1;

                if (positionOneAreaRectangle.Contains(mouse2Location))
                {
                    isUser2Invading = 1;
                    isUser2OnAPaper = 1;
                }
                else if (positionOneAreaRectangle.Contains(mouse1Location))
                    isUser1OnAPaper = 1;

                if (is1Down == true) is1Dragging = 1;
                else is1Dragging = 0;

                if (is2Down == true) is2Dragging = 1;
                else is2Dragging = 0;

                Point origin1 = Program.user1Origin;
                Point origin2 = Program.user2Origin;
                orderOfConditions = conditionOrder;
                lengthOfEmbodiment1 = Utilities.distanceBetweenPoints(mouse1Location, origin1);
                lengthOfEmbodiment2 = Utilities.distanceBetweenPoints(mouse2Location, origin2);

                distanceMouse1ToOrigin2 = Utilities.distanceBetweenPoints(mouse1Location, origin2);
                distanceMouse2ToOrigin1 = Utilities.distanceBetweenPoints(mouse2Location, origin1);

                //Are they crossing?
                double distance1Crossing = 0.0;
                double distance2Crossing = 0.0;
                Utilities.Segment line1 = new Utilities.Segment();
                line1.Start = origin1;
                line1.End = mouse1Location;
                Utilities.Segment line2 = new Utilities.Segment();
                line2.Start = origin2;
                line2.End = mouse2Location;

                // Blob intersection

                user1ArmUser2PaperOcclusionArea = Program.mainForm.user1ArmUser2PaperOcclusion;
                user1ArmUser2PaperAreOccluding = user1ArmUser2PaperOcclusionArea == 0 ? 0 : 1;

                user2ArmUser1PaperOcclusionArea = Program.mainForm.user2ArmUser1PaperOcclusion;
                user2ArmUser1PaperAreOccluding = user2ArmUser1PaperOcclusionArea == 0 ? 0 : 1;

                durationOfBlobsIntersecting = 0;

                if (Program.mainForm.blobOverlap == 0)
                {
                    beginBlobsIntersecting = 0;
                    areBlobsIntersecting = 0;

                    if (wereBlobsIntersecting == true)
                    {
                        //not intersecting. this is the first time we see them apart
                        endBlobsIntersecting = 1;
                        wereBlobsIntersecting = false;
                    }
                    else
                    {
                        //not intersecting, reset
                        beginBlobsIntersecting = 0;
                        endBlobsIntersecting = 0;
                    }
                }
                else
                {
                    areBlobsIntersecting = 1;
                    if (wereBlobsIntersecting == false)
                    {
                        //first time we see this intersection
                        beginBlobsIntersecting = 1;
                        endBlobsIntersecting = 0;
                        startSecondsOfBlobsIntersecting = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds;
                        wereBlobsIntersecting = true;
                    }
                    else
                    {
                        //still intersecting, not first time
                        beginBlobsIntersecting = 0;
                        endBlobsIntersecting = 0;
                    }
                }

                if (Program.mainForm.blobOverlap > maxBlobIntersectionAmount)
                    maxBlobIntersectionAmount = Program.mainForm.blobOverlap;

                if (startSecondsOfBlobsIntersecting > 0)
                    durationOfBlobsIntersecting = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds - startSecondsOfBlobsIntersecting;

                if (endBlobsIntersecting == 1)
                {
                    CrossingEvent cross = new CrossingEvent(conditionOrder, sessionID, currentCondition, 0, 0, durationOfBlobsIntersecting,
                        maxBlobIntersectionAmount, true, user1AtFault, user2AtFault);
                    HaikuStudyController.crossingEventsLog.Add(cross);
                    startSecondsOfBlobsIntersecting = 0;
                    maxBlobIntersectionAmount = 0;
                }

                // Line crossing

                durationOfCrossing = 0;

                crossingPoint = Point.Empty;
                PointF? tempIntersectionPoint = Utilities.areSegmentsIntersecting(line1, line2);
                Point intersectionPoint = Point.Empty;
                if (tempIntersectionPoint == null)
                {
                    beginCrossing = 0;
                    areCrossing = 0;

                    if (wereCrossing == true)
                    {
                        //not crossing. this is the first time we see them uncrossed
                        endCrossing = 1;
                        wereCrossing = false;
                    }
                    else
                    {
                        //not crossing, reset
                        beginCrossing = 0;
                        endCrossing = 0;
                    }
                }
                else
                {
                    areCrossing = 1;
                    if (wereCrossing == false)
                    {
                        //first time we see this cross
                        beginCrossing = 1;
                        endCrossing = 0;
                        startSecondsOfCrossing = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds;
                        wereCrossing = true;
                    }
                    else
                    {
                        //still crossing, not first time
                        beginCrossing = 0;
                        endCrossing = 0;
                    }

                    intersectionPoint = new Point((int)tempIntersectionPoint.Value.X, (int)tempIntersectionPoint.Value.Y);
                    crossingPoint = intersectionPoint;
                    distance1Crossing = Utilities.distanceBetweenPoints(mouse1Location, intersectionPoint);
                    distance2Crossing = Utilities.distanceBetweenPoints(mouse2Location, intersectionPoint);
                    //Console.WriteLine("crossing with distances " + distance1Crossing + " " + distance2Crossing);
                }

                howMuch1Crossing = distance1Crossing;
                howMuch2Crossing = distance2Crossing;
                if (distance1Crossing > maxCrossAmount)
                    maxCrossAmount = distance1Crossing;
                if (distance2Crossing > maxCrossAmount)
                    maxCrossAmount = distance2Crossing;

                //Distance between the two endpoints
                distanceBetweenEndPoints = Utilities.distanceBetweenPoints(mouse1Location, mouse2Location);

                //Minimum distance between mouse1 and embodiment2
                distanceBetweenMouse1Embodiment2 = Utilities.getMinimumDistanceBetweenLineAndPoint(line2, mouse1Location.X, mouse1Location.Y);

                //Minimum distance between mouse2 and embodiment1
                distanceBetweenMouse2Embodiment1 = Utilities.getMinimumDistanceBetweenLineAndPoint(line1, mouse2Location.X, mouse2Location.Y);

                if (startSecondsOfCrossing > 0)
                    durationOfCrossing = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds - startSecondsOfCrossing;

                isUser1OnOtherSide = isUser2OnOtherSide = 0;
                if (mouse1Location.X > Program.tableWidth / 2.0)
                    isUser1OnOtherSide = 1;
                if (mouse2Location.X < Program.tableHeight / 2.0)
                    isUser2OnOtherSide = 1;

                if (user1LastLocation != Point.Empty)
                    user1TotalDistance += Utilities.distanceBetweenPoints(mouse1Location, user1LastLocation);
                if (user2LastLocation != Point.Empty)
                    user2TotalDistance += Utilities.distanceBetweenPoints(mouse2Location, user2LastLocation);

                user1LastLocation = mouse1Location;
                user2LastLocation = mouse2Location;

                if (endCrossing == 1)
                {
                    CrossingEvent cross = new CrossingEvent(conditionOrder, sessionID, currentCondition, durationOfCrossing, maxCrossAmount, 0, 0, false, user1AtFault, user2AtFault);
                    HaikuStudyController.crossingEventsLog.Add(cross);
                    startSecondsOfCrossing = 0;
                    maxCrossAmount = 0;
                }

                if (areBlocked == true)
                {
                    if (wereBlocked == false)
                        startSecondsOfCrossing = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds;

                    areTheyBlocked = 1;
                    wereBlocked = true;
                }
                else if (wereBlocked == true)
                {
                    durationOfCrossing = (DateTime.Now - Utilities.experimentBeganAtTime).TotalSeconds - startSecondsOfCrossing;
                    CrossingEvent cross = new CrossingEvent(conditionOrder, sessionID, currentCondition, durationOfCrossing, maxCrossAmount, 0, 0, false, user1AtFault, user2AtFault);
                    HaikuStudyController.crossingEventsLog.Add(cross);
                    startSecondsOfCrossing = 0;
                    wereBlocked = false;
                }
            }
コード例 #3
0
ファイル: HaikuStudyController.cs プロジェクト: solson/DSAE
        public bool areCrossing(Point location1, Point location2)
        {
            Utilities.Segment line1 = new Utilities.Segment();
            line1.Start = Program.user1Origin;
            line1.End = location1;
            Utilities.Segment line2 = new Utilities.Segment();
            line2.Start = Program.user2Origin;
            line2.End = location2;
            PointF? tempIntersectionPoint = Utilities.areSegmentsIntersecting(line1, line2);
            Point intersectionPoint = Point.Empty;

            if (tempIntersectionPoint != null)
                return true;

            return false;
        }