﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Millisecond Forums » Millisecond Forums » Inquisit 5  » non-rectangular buttons?</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Tue, 29 Sep 2026 23:54:29 GMT</lastBuildDate><ttl>20</ttl><item><title>non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27348.aspx</link><description>Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Tue, 02 Jul 2019 17:33:30 GMT</pubDate><dc:creator>morgan_w</dc:creator></item><item><title>RE: non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27377.aspx</link><description>&lt;div data-id="27363" class="if-quote-wrapper" unselectable="on" data-guid="1562114000320"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27363" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27363" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27363" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 7/2/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27363"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27358" class="if-quote-wrapper" unselectable="on" data-guid="1562114000320"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27358" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27358" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27358" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 7/2/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27358"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27355" class="if-quote-wrapper" unselectable="on" data-guid="1562114000320"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27355" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27355" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27355" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27355"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27350" class="if-quote-wrapper" unselectable="on" data-guid="1562114000320"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27350" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27350" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27350" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27350"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27348" class="if-quote-wrapper" unselectable="on" data-guid="1562114000320"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27348" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27348" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27348" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 6/30/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27348"&gt;&lt;div class="if-quote-message-margin"&gt;Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27348"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;I assume you're using &amp;lt;picture&amp;gt; elements for the triangles, which is why they're treated as rectangles. Even if an image displays a triangle, the image itself is still a full rectangle. You would not have that problem with &amp;lt;shape&amp;gt; elements:&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = triangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orangered&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orange&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The above will differentiate between a click in shape A vs shape B just fine, however, creating an array like the one you want is not possible with overlaid &amp;lt;shape&amp;gt;s. You could build an array with rectangles&amp;nbsp; as a simple workaround.&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orangered&lt;br/&gt;/ valign = top&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orange&lt;br/&gt;/ valign = bottom&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;In sum, there certainly is no easy way to do this, if triangles are an absolute requirement. In theory, you would build a set of custom expressions that perform a triangle test, but the math is not entirely trivial (e.g. &lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;&lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle&lt;/a&gt;&lt;/a&gt; ).&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27350"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks a lot Dave, really appreciate the options. Will play around with boxes to see if I can get a satisfactory compromise before I attempt the maths!&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27355"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;Tried to do the maths in the end (thanks for the link! went with barycentric coordinates) and got it working for a single triangle pretty easily. However, my current attempt will not let me distinguish between two triangles that are placed together to form a square as in any corner of the image above, even though I have triangle tests for both triangles individually. Any ideas to tie each triangle test as the condition for each triangle as a response? I'll include what I've whipped up so far:&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle1&amp;gt;&lt;br/&gt;/ items = ("practice_triangle.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle2&amp;gt;&lt;br/&gt;/ items = ("practice_triangle2.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle1&amp;gt;&lt;br/&gt;/ x1 = picture.triangle1.left&lt;br/&gt;/ y1 = picture.triangle1.bottom&lt;br/&gt;/ x2 = picture.triangle1.left&lt;br/&gt;/ y2 = picture.triangle1.top&lt;br/&gt;/ x3 = picture.triangle1.right&lt;br/&gt;/ y3 = picture.triangle1.bottom&lt;br/&gt;/ a = ((expressions.y2 - expressions.y3)*(mouse.x - expressions.x3) + (expressions.x3 - expressions.x2)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ b = ((expressions.y3 - expressions.y1)*(mouse.x - expressions.x3) + (expressions.x1 - expressions.x3)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ c = 1 - expressions.a - expressions.b&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle2&amp;gt;&lt;br/&gt;/ x12 = picture.triangle2.left&lt;br/&gt;/ y12 = picture.triangle2.top&lt;br/&gt;/ x22 = picture.triangle2.right&lt;br/&gt;/ y22 = picture.triangle2.top&lt;br/&gt;/ x32 = picture.triangle2.right&lt;br/&gt;/ y32 = picture.triangle2.bottom&lt;br/&gt;/ a2 = ((expressions.y22 - expressions.y32)*(mouse.x - expressions.x32) + (expressions.x32 - expressions.x22)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ b2 = ((expressions.y32 - expressions.y12)*(mouse.x - expressions.x32) + (expressions.x12 - expressions.x32)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ c2 = 1 - expressions.a2 - expressions.b2&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text report&amp;gt;&lt;br/&gt;/ items = ("&amp;lt;%mouse.x%&amp;gt;, &amp;lt;%mouse.y%&amp;gt;, &amp;lt;%expressions.a%&amp;gt;, &amp;lt;%expressions.b%&amp;gt;, &amp;lt;%expressions.c%&amp;gt;", &amp;lt;%expressions.a2%&amp;gt;, &amp;lt;%expressions.b2%&amp;gt;, &amp;lt;%expressions.c2%&amp;gt;)&lt;br/&gt;/ position = (50, 15)&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1 = triangle1, triangle2, report]&lt;br/&gt;/ validresponse = (picture.triangle1, picture.triangle2)&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ isvalidresponse = [&lt;br/&gt;0&amp;lt;=expressions.a &amp;amp;&amp;amp; expressions.a &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b &amp;amp;&amp;amp; expressions.b &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c &amp;amp;&amp;amp; expressions.c &amp;lt;= 1 || 0&amp;lt;=expressions.a2 &amp;amp;&amp;amp; expressions.a2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b2 &amp;amp;&amp;amp; expressions.b2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c2 &amp;amp;&amp;amp; expressions.c2 &amp;lt;= 1&lt;br/&gt;]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block myblock&amp;gt;&lt;br/&gt;/ trials = [1-3 = mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;Yellow triangle is practice_triangle1.png and green is practice_triangle2.png &lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png" alt="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png"&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png" alt="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;At the moment, as I understand it, the || condition in the / isvalidresponse is making the triangle test effectively useless, and I can click on either 'triangle' but the response registered is the first image. Does anyone have any ideas to tie the mouse location to a specific triangle, even though they overlap? &lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27358"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;You'll want to do something like this:&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle1&amp;gt;&lt;br/&gt;/ items = ("practice_triangle1.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle2&amp;gt;&lt;br/&gt;/ items = ("practice_triangle2.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle1&amp;gt;&lt;br/&gt;/ x1 = picture.triangle1.left&lt;br/&gt;/ y1 = picture.triangle1.bottom&lt;br/&gt;/ x2 = picture.triangle1.left&lt;br/&gt;/ y2 = picture.triangle1.top&lt;br/&gt;/ x3 = picture.triangle1.right&lt;br/&gt;/ y3 = picture.triangle1.bottom&lt;br/&gt;/ a = ((expressions.y2 - expressions.y3)*(mouse.x - expressions.x3) + (expressions.x3 - expressions.x2)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ b = ((expressions.y3 - expressions.y1)*(mouse.x - expressions.x3) + (expressions.x1 - expressions.x3)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ c = 1 - expressions.a - expressions.b&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle2&amp;gt;&lt;br/&gt;/ x12 = picture.triangle2.left&lt;br/&gt;/ y12 = picture.triangle2.top&lt;br/&gt;/ x22 = picture.triangle2.right&lt;br/&gt;/ y22 = picture.triangle2.top&lt;br/&gt;/ x32 = picture.triangle2.right&lt;br/&gt;/ y32 = picture.triangle2.bottom&lt;br/&gt;/ a2 = ((expressions.y22 - expressions.y32)*(mouse.x - expressions.x32) + (expressions.x32 - expressions.x22)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ b2 = ((expressions.y32 - expressions.y12)*(mouse.x - expressions.x32) + (expressions.x12 - expressions.x32)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ c2 = 1 - expressions.a2 - expressions.b2&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text report&amp;gt;&lt;br/&gt;/ items = ("&amp;lt;%mouse.x%&amp;gt;, &amp;lt;%mouse.y%&amp;gt;, &amp;lt;%expressions.a%&amp;gt;, &amp;lt;%expressions.b%&amp;gt;, &amp;lt;%expressions.c%&amp;gt;, &amp;lt;%expressions.a2%&amp;gt;, &amp;lt;%expressions.b2%&amp;gt;, &amp;lt;%expressions.c2%&amp;gt;")&lt;br/&gt;/ position = (50, 15)&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;values.response = "";&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1 = triangle1, triangle2, report]&lt;br/&gt;/ validresponse = (lbuttondown)&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ isvalidresponse = [&lt;br/&gt;if(0&amp;lt;=expressions.a &amp;amp;&amp;amp; expressions.a &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b &amp;amp;&amp;amp; expressions.b &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c &amp;amp;&amp;amp; expressions.c &amp;lt;= 1){&lt;br/&gt;values.response = "triangle1"; true;&lt;br/&gt;} &lt;br/&gt;else if(0&amp;lt;=expressions.a2 &amp;amp;&amp;amp; expressions.a2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b2 &amp;amp;&amp;amp; expressions.b2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c2 &amp;amp;&amp;amp; expressions.c2 &amp;lt;= 1){&lt;br/&gt;values.response = "triangle2"; true;&lt;br/&gt;}&lt;br/&gt;]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block myblock&amp;gt;&lt;br/&gt;/ trials = [1-3 = mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ response = ""&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;data&amp;gt;&lt;br/&gt;/ columns = (date time subject group blocknum blockcode trialnum trialcode values.response latency)&lt;br/&gt;/ separatefiles = true&lt;br/&gt;&amp;lt;/data&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27363"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Legend!&lt;br/&gt;</description><pubDate>Tue, 02 Jul 2019 17:33:30 GMT</pubDate><dc:creator>morgan_w</dc:creator></item><item><title>RE: non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27363.aspx</link><description>&lt;div data-id="27358" class="if-quote-wrapper" unselectable="on" data-guid="1562070342765"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27358" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27358" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27358" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 7/2/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27358"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27355" class="if-quote-wrapper" unselectable="on" data-guid="1562070342765"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27355" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27355" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27355" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27355"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27350" class="if-quote-wrapper" unselectable="on" data-guid="1562070342765"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27350" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27350" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27350" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27350"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27348" class="if-quote-wrapper" unselectable="on" data-guid="1562070342765"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27348" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27348" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27348" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 6/30/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27348"&gt;&lt;div class="if-quote-message-margin"&gt;Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27348"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;I assume you're using &amp;lt;picture&amp;gt; elements for the triangles, which is why they're treated as rectangles. Even if an image displays a triangle, the image itself is still a full rectangle. You would not have that problem with &amp;lt;shape&amp;gt; elements:&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = triangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orangered&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orange&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The above will differentiate between a click in shape A vs shape B just fine, however, creating an array like the one you want is not possible with overlaid &amp;lt;shape&amp;gt;s. You could build an array with rectangles&amp;nbsp; as a simple workaround.&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orangered&lt;br/&gt;/ valign = top&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orange&lt;br/&gt;/ valign = bottom&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;In sum, there certainly is no easy way to do this, if triangles are an absolute requirement. In theory, you would build a set of custom expressions that perform a triangle test, but the math is not entirely trivial (e.g. &lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;&lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle&lt;/a&gt;&lt;/a&gt; ).&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27350"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks a lot Dave, really appreciate the options. Will play around with boxes to see if I can get a satisfactory compromise before I attempt the maths!&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27355"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;Tried to do the maths in the end (thanks for the link! went with barycentric coordinates) and got it working for a single triangle pretty easily. However, my current attempt will not let me distinguish between two triangles that are placed together to form a square as in any corner of the image above, even though I have triangle tests for both triangles individually. Any ideas to tie each triangle test as the condition for each triangle as a response? I'll include what I've whipped up so far:&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle1&amp;gt;&lt;br/&gt;/ items = ("practice_triangle.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle2&amp;gt;&lt;br/&gt;/ items = ("practice_triangle2.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle1&amp;gt;&lt;br/&gt;/ x1 = picture.triangle1.left&lt;br/&gt;/ y1 = picture.triangle1.bottom&lt;br/&gt;/ x2 = picture.triangle1.left&lt;br/&gt;/ y2 = picture.triangle1.top&lt;br/&gt;/ x3 = picture.triangle1.right&lt;br/&gt;/ y3 = picture.triangle1.bottom&lt;br/&gt;/ a = ((expressions.y2 - expressions.y3)*(mouse.x - expressions.x3) + (expressions.x3 - expressions.x2)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ b = ((expressions.y3 - expressions.y1)*(mouse.x - expressions.x3) + (expressions.x1 - expressions.x3)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ c = 1 - expressions.a - expressions.b&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle2&amp;gt;&lt;br/&gt;/ x12 = picture.triangle2.left&lt;br/&gt;/ y12 = picture.triangle2.top&lt;br/&gt;/ x22 = picture.triangle2.right&lt;br/&gt;/ y22 = picture.triangle2.top&lt;br/&gt;/ x32 = picture.triangle2.right&lt;br/&gt;/ y32 = picture.triangle2.bottom&lt;br/&gt;/ a2 = ((expressions.y22 - expressions.y32)*(mouse.x - expressions.x32) + (expressions.x32 - expressions.x22)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ b2 = ((expressions.y32 - expressions.y12)*(mouse.x - expressions.x32) + (expressions.x12 - expressions.x32)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ c2 = 1 - expressions.a2 - expressions.b2&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text report&amp;gt;&lt;br/&gt;/ items = ("&amp;lt;%mouse.x%&amp;gt;, &amp;lt;%mouse.y%&amp;gt;, &amp;lt;%expressions.a%&amp;gt;, &amp;lt;%expressions.b%&amp;gt;, &amp;lt;%expressions.c%&amp;gt;", &amp;lt;%expressions.a2%&amp;gt;, &amp;lt;%expressions.b2%&amp;gt;, &amp;lt;%expressions.c2%&amp;gt;)&lt;br/&gt;/ position = (50, 15)&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1 = triangle1, triangle2, report]&lt;br/&gt;/ validresponse = (picture.triangle1, picture.triangle2)&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ isvalidresponse = [&lt;br/&gt;0&amp;lt;=expressions.a &amp;amp;&amp;amp; expressions.a &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b &amp;amp;&amp;amp; expressions.b &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c &amp;amp;&amp;amp; expressions.c &amp;lt;= 1 || 0&amp;lt;=expressions.a2 &amp;amp;&amp;amp; expressions.a2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b2 &amp;amp;&amp;amp; expressions.b2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c2 &amp;amp;&amp;amp; expressions.c2 &amp;lt;= 1&lt;br/&gt;]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block myblock&amp;gt;&lt;br/&gt;/ trials = [1-3 = mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;Yellow triangle is practice_triangle1.png and green is practice_triangle2.png &lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png" alt="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png"&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png" alt="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;At the moment, as I understand it, the || condition in the / isvalidresponse is making the triangle test effectively useless, and I can click on either 'triangle' but the response registered is the first image. Does anyone have any ideas to tie the mouse location to a specific triangle, even though they overlap? &lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27358"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;You'll want to do something like this:&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle1&amp;gt;&lt;br/&gt;/ items = ("practice_triangle1.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle2&amp;gt;&lt;br/&gt;/ items = ("practice_triangle2.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle1&amp;gt;&lt;br/&gt;/ x1 = picture.triangle1.left&lt;br/&gt;/ y1 = picture.triangle1.bottom&lt;br/&gt;/ x2 = picture.triangle1.left&lt;br/&gt;/ y2 = picture.triangle1.top&lt;br/&gt;/ x3 = picture.triangle1.right&lt;br/&gt;/ y3 = picture.triangle1.bottom&lt;br/&gt;/ a = ((expressions.y2 - expressions.y3)*(mouse.x - expressions.x3) + (expressions.x3 - expressions.x2)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ b = ((expressions.y3 - expressions.y1)*(mouse.x - expressions.x3) + (expressions.x1 - expressions.x3)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ c = 1 - expressions.a - expressions.b&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle2&amp;gt;&lt;br/&gt;/ x12 = picture.triangle2.left&lt;br/&gt;/ y12 = picture.triangle2.top&lt;br/&gt;/ x22 = picture.triangle2.right&lt;br/&gt;/ y22 = picture.triangle2.top&lt;br/&gt;/ x32 = picture.triangle2.right&lt;br/&gt;/ y32 = picture.triangle2.bottom&lt;br/&gt;/ a2 = ((expressions.y22 - expressions.y32)*(mouse.x - expressions.x32) + (expressions.x32 - expressions.x22)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ b2 = ((expressions.y32 - expressions.y12)*(mouse.x - expressions.x32) + (expressions.x12 - expressions.x32)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ c2 = 1 - expressions.a2 - expressions.b2&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text report&amp;gt;&lt;br/&gt;/ items = ("&amp;lt;%mouse.x%&amp;gt;, &amp;lt;%mouse.y%&amp;gt;, &amp;lt;%expressions.a%&amp;gt;, &amp;lt;%expressions.b%&amp;gt;, &amp;lt;%expressions.c%&amp;gt;, &amp;lt;%expressions.a2%&amp;gt;, &amp;lt;%expressions.b2%&amp;gt;, &amp;lt;%expressions.c2%&amp;gt;")&lt;br/&gt;/ position = (50, 15)&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;values.response = "";&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1 = triangle1, triangle2, report]&lt;br/&gt;/ validresponse = (lbuttondown)&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ isvalidresponse = [&lt;br/&gt;if(0&amp;lt;=expressions.a &amp;amp;&amp;amp; expressions.a &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b &amp;amp;&amp;amp; expressions.b &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c &amp;amp;&amp;amp; expressions.c &amp;lt;= 1){&lt;br/&gt;values.response = "triangle1"; true;&lt;br/&gt;} &lt;br/&gt;else if(0&amp;lt;=expressions.a2 &amp;amp;&amp;amp; expressions.a2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b2 &amp;amp;&amp;amp; expressions.b2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c2 &amp;amp;&amp;amp; expressions.c2 &amp;lt;= 1){&lt;br/&gt;values.response = "triangle2"; true;&lt;br/&gt;}&lt;br/&gt;]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block myblock&amp;gt;&lt;br/&gt;/ trials = [1-3 = mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ response = ""&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;data&amp;gt;&lt;br/&gt;/ columns = (date time subject group blocknum blockcode trialnum trialcode values.response latency)&lt;br/&gt;/ separatefiles = true&lt;br/&gt;&amp;lt;/data&amp;gt;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Tue, 02 Jul 2019 05:39:38 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27358.aspx</link><description>&lt;div data-id="27355" class="if-quote-wrapper" unselectable="on" data-guid="1562058065269"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27355" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27355" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27355" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27355"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27350" class="if-quote-wrapper" unselectable="on" data-guid="1562058065269"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27350" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27350" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27350" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27350"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27348" class="if-quote-wrapper" unselectable="on" data-guid="1562058065269"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27348" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27348" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27348" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 6/30/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27348"&gt;&lt;div class="if-quote-message-margin"&gt;Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27348"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;I assume you're using &amp;lt;picture&amp;gt; elements for the triangles, which is why they're treated as rectangles. Even if an image displays a triangle, the image itself is still a full rectangle. You would not have that problem with &amp;lt;shape&amp;gt; elements:&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = triangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orangered&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orange&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The above will differentiate between a click in shape A vs shape B just fine, however, creating an array like the one you want is not possible with overlaid &amp;lt;shape&amp;gt;s. You could build an array with rectangles&amp;nbsp; as a simple workaround.&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orangered&lt;br/&gt;/ valign = top&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orange&lt;br/&gt;/ valign = bottom&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;In sum, there certainly is no easy way to do this, if triangles are an absolute requirement. In theory, you would build a set of custom expressions that perform a triangle test, but the math is not entirely trivial (e.g. &lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;&lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle&lt;/a&gt;&lt;/a&gt; ).&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27350"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks a lot Dave, really appreciate the options. Will play around with boxes to see if I can get a satisfactory compromise before I attempt the maths!&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27355"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;Tried to do the maths in the end (thanks for the link! went with barycentric coordinates) and got it working for a single triangle pretty easily. However, my current attempt will not let me distinguish between two triangles that are placed together to form a square as in any corner of the image above, even though I have triangle tests for both triangles individually. Any ideas to tie each triangle test as the condition for each triangle as a response? I'll include what I've whipped up so far:&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle1&amp;gt;&lt;br/&gt;/ items = ("practice_triangle.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;picture triangle2&amp;gt;&lt;br/&gt;/ items = ("practice_triangle2.png")&lt;br/&gt;/ position = (50,50)&lt;br/&gt;&amp;lt;/picture&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle1&amp;gt;&lt;br/&gt;/ x1 = picture.triangle1.left&lt;br/&gt;/ y1 = picture.triangle1.bottom&lt;br/&gt;/ x2 = picture.triangle1.left&lt;br/&gt;/ y2 = picture.triangle1.top&lt;br/&gt;/ x3 = picture.triangle1.right&lt;br/&gt;/ y3 = picture.triangle1.bottom&lt;br/&gt;/ a = ((expressions.y2 - expressions.y3)*(mouse.x - expressions.x3) + (expressions.x3 - expressions.x2)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ b = ((expressions.y3 - expressions.y1)*(mouse.x - expressions.x3) + (expressions.x1 - expressions.x3)*(mouse.y - expressions.y3)) / ((expressions.y2 - expressions.y3)*(expressions.x1 - expressions.x3)+(expressions.x3 - expressions.x2)*(expressions.y1 - expressions.y3))&lt;br/&gt;/ c = 1 - expressions.a - expressions.b&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;expressions triangle2&amp;gt;&lt;br/&gt;/ x12 = picture.triangle2.left&lt;br/&gt;/ y12 = picture.triangle2.top&lt;br/&gt;/ x22 = picture.triangle2.right&lt;br/&gt;/ y22 = picture.triangle2.top&lt;br/&gt;/ x32 = picture.triangle2.right&lt;br/&gt;/ y32 = picture.triangle2.bottom&lt;br/&gt;/ a2 = ((expressions.y22 - expressions.y32)*(mouse.x - expressions.x32) + (expressions.x32 - expressions.x22)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ b2 = ((expressions.y32 - expressions.y12)*(mouse.x - expressions.x32) + (expressions.x12 - expressions.x32)*(mouse.y - expressions.y32)) / ((expressions.y22 - expressions.y32)*(expressions.x12 - expressions.x32)+(expressions.x32 - expressions.x22)*(expressions.y12 - expressions.y32))&lt;br/&gt;/ c2 = 1 - expressions.a2 - expressions.b2&lt;br/&gt;&amp;lt;/expressions&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text report&amp;gt;&lt;br/&gt;/ items = ("&amp;lt;%mouse.x%&amp;gt;, &amp;lt;%mouse.y%&amp;gt;, &amp;lt;%expressions.a%&amp;gt;, &amp;lt;%expressions.b%&amp;gt;, &amp;lt;%expressions.c%&amp;gt;", &amp;lt;%expressions.a2%&amp;gt;, &amp;lt;%expressions.b2%&amp;gt;, &amp;lt;%expressions.c2%&amp;gt;)&lt;br/&gt;/ position = (50, 15)&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1 = triangle1, triangle2, report]&lt;br/&gt;/ validresponse = (picture.triangle1, picture.triangle2)&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ isvalidresponse = [&lt;br/&gt;0&amp;lt;=expressions.a &amp;amp;&amp;amp; expressions.a &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b &amp;amp;&amp;amp; expressions.b &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c &amp;amp;&amp;amp; expressions.c &amp;lt;= 1 || 0&amp;lt;=expressions.a2 &amp;amp;&amp;amp; expressions.a2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.b2 &amp;amp;&amp;amp; expressions.b2 &amp;lt;= 1 &amp;amp;&amp;amp; 0 &amp;lt;= expressions.c2 &amp;amp;&amp;amp; expressions.c2 &amp;lt;= 1&lt;br/&gt;]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block myblock&amp;gt;&lt;br/&gt;/ trials = [1-3 = mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;Yellow triangle is practice_triangle1.png and green is practice_triangle2.png &lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png" alt="https://www.millisecond.com/forums/Uploads/Images/88dea02a-98f2-4841-9055-0339.png" /&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png" alt="https://www.millisecond.com/forums/Uploads/Images/93d1b0c2-6780-440e-aef0-9e8d.png" /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;At the moment, as I understand it, the || condition in the / isvalidresponse is making the triangle test effectively useless, and I can click on either 'triangle' but the response registered is the first image. Does anyone have any ideas to tie the mouse location to a specific triangle, even though they overlap? &lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;</description><pubDate>Tue, 02 Jul 2019 02:25:18 GMT</pubDate><dc:creator>morgan_w</dc:creator></item><item><title>RE: non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27355.aspx</link><description>&lt;div data-id="27350" class="if-quote-wrapper" unselectable="on" data-guid="1562032802773"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27350" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27350" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27350" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 7/1/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27350"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="27348" class="if-quote-wrapper" unselectable="on" data-guid="1562032802773"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27348" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27348" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27348" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 6/30/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27348"&gt;&lt;div class="if-quote-message-margin"&gt;Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27348"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;I assume you're using &amp;lt;picture&amp;gt; elements for the triangles, which is why they're treated as rectangles. Even if an image displays a triangle, the image itself is still a full rectangle. You would not have that problem with &amp;lt;shape&amp;gt; elements:&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = triangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orangered&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orange&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The above will differentiate between a click in shape A vs shape B just fine, however, creating an array like the one you want is not possible with overlaid &amp;lt;shape&amp;gt;s. You could build an array with rectangles&amp;nbsp; as a simple workaround.&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orangered&lt;br/&gt;/ valign = top&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orange&lt;br/&gt;/ valign = bottom&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;In sum, there certainly is no easy way to do this, if triangles are an absolute requirement. In theory, you would build a set of custom expressions that perform a triangle test, but the math is not entirely trivial (e.g. &lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;&lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle&lt;/a&gt;&lt;/a&gt; ).&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27350"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks a lot Dave, really appreciate the options. Will play around with boxes to see if I can get a satisfactory compromise before I attempt the maths!&lt;br/&gt;</description><pubDate>Mon, 01 Jul 2019 19:00:48 GMT</pubDate><dc:creator>morgan_w</dc:creator></item><item><title>RE: non-rectangular buttons?</title><link>https://forums.millisecond.com/Topic27350.aspx</link><description>&lt;div data-id="27348" class="if-quote-wrapper" unselectable="on" data-guid="1561982058355"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="27348" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="27348" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="27348" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;morgan_w - 6/30/2019&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-27348"&gt;&lt;div class="if-quote-message-margin"&gt;Hello!&lt;br/&gt;&lt;br/&gt;Sorry if this question has already been asked and answered, I haven't had much luck finding it.&lt;br/&gt;&lt;br/&gt;I've been hoping to replicate a response button setup with 8 options that are symmetrically placed around the center of the screen, but the eight options are related in 4 pairs. The standard for this involves triangular buttons in shapes and orientations roughly like the attached image, so that each pair of related options forms a coloured box. At the moment I've noticed that Inquisit is treating the triangles as entire rectangles, which would make the buttons overlap. &lt;br/&gt;&lt;br/&gt;&lt;img src="https://www.millisecond.com/forums/Uploads/Images/cdfbd859-be87-4e4e-88c7-03e1.png" data-download-url="https://www.millisecond.com/forums/Uploads/Images/402b0366-f810-4d3e-8f09-b5bf.png"&gt;&lt;br/&gt;&lt;br/&gt;Thanks for the help!&lt;br/&gt;Best, &lt;br/&gt;Morgan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="27348"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;I assume you're using &amp;lt;picture&amp;gt; elements for the triangles, which is why they're treated as rectangles. Even if an image displays a triangle, the image itself is still a full rectangle. You would not have that problem with &amp;lt;shape&amp;gt; elements:&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = triangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orangered&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,500px)&lt;br/&gt;/ color = orange&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The above will differentiate between a click in shape A vs shape B just fine, however, creating an array like the one you want is not possible with overlaid &amp;lt;shape&amp;gt;s. You could build an array with rectangles&amp;nbsp; as a simple workaround.&lt;br/&gt;&lt;br/&gt;&amp;lt;shape a&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orangered&lt;br/&gt;/ valign = top&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape b&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ size = (500px,250px)&lt;br/&gt;/ color = orange&lt;br/&gt;/ valign = bottom&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=b,a]&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;/ validresponse = (a,b)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;In sum, there certainly is no easy way to do this, if triangles are an absolute requirement. In theory, you would build a set of custom expressions that perform a triangle test, but the math is not entirely trivial (e.g. &lt;a href="https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"&gt;https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle&lt;/a&gt; ).&lt;br/&gt;</description><pubDate>Mon, 01 Jul 2019 05:13:56 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>