Enargy, Posted April 14, 2016 Share Posted April 14, 2016 Bueno como dice en el titulo, como podría hacer el calculo para el radio? he encontrado ejemplos por google que son de JavaScript pero no me funciona. Link to comment
Alexs Posted April 14, 2016 Share Posted April 14, 2016 Si el círculo ocupa todo el espacio de la imagen, su radio será el ancho o el alto dividido en dos. Link to comment
Enargy, Posted April 14, 2016 Author Share Posted April 14, 2016 Si el círculo ocupa todo el espacio de la imagen, su radio será el ancho o el alto dividido en dos. Ocupa toda la imagen. Lo que trato de hacer es que yo tengo una imagen 120x120 donde un circulo ocupa el diámetro del tamaño de la imagen, lo que quiero hacer es como chequeo si la posición del cursor es inferior a la superficie del circulo. Link to comment
Enargy, Posted April 14, 2016 Author Share Posted April 14, 2016 El calculo se puede hacer dependiendo en dónde pondrás la imagen, si es en pantalla, es por la mitad del ancho (eje X) y la mitad de la altura (eje Y) del espacio que ocupe la imagen. Me quedará en el centro del circulo, pero lo que yo quiero es como hacer para que el cursor se detecte al entrar a la circunferencia. EDIT: Sería calcular el centro del circulo más la posición del cursor, lo cual se hacer pero no usando los ángulos ya que es de 360º Link to comment
Tomas Posted April 14, 2016 Share Posted April 14, 2016 También puedes usar la hipotenusa, calculas la posición del puntero en la pantalla y con respecto al centro de tu circulo, luego evalúas si la hipotenusa es menor al radio. Si es así, entonces el puntero está dentro del circulo. ¿Hipotenusa en la circunferencia? Link to comment
Tomas Posted April 15, 2016 Share Posted April 15, 2016 También puedes usar la hipotenusa, calculas la posición del puntero en la pantalla y con respecto al centro de tu circulo, luego evalúas si la hipotenusa es menor al radio. Si es así, entonces el puntero está dentro del circulo. ¿Hipotenusa en la circunferencia? Ah cierto, no me acordaba que todavía hay gente aqui de pre-escolar. Pones un circulo y luego un triangulito que uno de sus vértices sea el punto central del circulo, el otro vértice toque algún punto de la circunferencia y último vértice esté sobre uno de los ejes. Nunca mencionaste tríangulos inscriptos, sólo rectángulos Si no puedes responder sin insultos simplemente no lo hagas Link to comment
Enargy, Posted April 15, 2016 Author Share Posted April 15, 2016 (edited) Tengo esto pero no se me adapta bien. function isCursorHoverRadius(x, y, r) if not isCursorShowing() then return end local cx, cy = getCursorPosition() local fx, fy = cx*sx, cy*sy if ( (x - fx) * (x - fx) + (y - fy) * (y - fy) <= r * r ) then return true end return false end y la sintaxis seria if isCursorHoverRadius( 85, 500, 120 ) then -- 120 es el diámetro del circulo que también es el ancho y altura de la imagen. print("inside!") end EDIT: Me queda mas o menos asi de mal. http://i.imgur.com/gDzE3S9.jpg Edited April 15, 2016 by Guest Link to comment
Enargy, Posted April 15, 2016 Author Share Posted April 15, 2016 function isCursorHoverInRadius(x, y, r) -- C(x, y) centro del circulo y r = radio if isCursorShowing() then local cx, cy = getCursorPosition() local dist = (((x-cx)^(2))+((y-cy)^(2)))^(1/2) if dist <= r then return true end return false end end No me queda bien. Link to comment
Enargy, Posted April 15, 2016 Author Share Posted April 15, 2016 ¿Que no te queda bien?, explica más.El dato que vas a meter es el radio, no el diametro. Y si quieres obtener el radio, según el diametro, solo lo divides entre 2. Al hacer esa división me va a quedar el primer punto en 0, osea en el centro del circulo, y el radio sería la distancia entre el punto 0 hasta el arco de la circunferencia, nose si estoy correcto. Link to comment
Enargy, Posted April 15, 2016 Author Share Posted April 15, 2016 Al hacer esa división me va a quedar el primer punto en 0, osea en el centro del circulo, y el radio sería la distancia entre el punto 0 hasta el arco de la circunferencia, nose si estoy correcto. Si. Y la única división el script que publiqué indica la raíz cuadrada. Es que ni siquiera funciona el código, me dan un numero y solo cambia los decimales porque lo chequee con outputs. Link to comment
Enargy, Posted April 15, 2016 Author Share Posted April 15, 2016 Bueno tendré que usar rectángulos. ¿Podrían cerrar? Link to comment
Discord Moderators AlexTMjugador Posted April 29, 2016 Discord Moderators Share Posted April 29, 2016 Una circunferencia es el lugar geométrico de todos los puntos que tienen una misma distancia a otro punto. Esa distancia se llama radio y ese último punto se llama centro. Por tanto, para saber si el cursor está dentro de ella, solo necesitas considerar su centro y la distancia entre el centro y el cursor. Si esta distancia es menor o igual al radio, entonces está tocando la circunferencia o bien en su interior. Hablando en coordenadas, supongamos que el centro está en (x, y), y el cursor en (x1, y1). Podemos definir un vector (x1 - x, y1 - y) cuyo extremo es (x1, y1) y cuyo origen es (x, y). Si hallas el módulo del vector definido por ese último par de coordenadas, resolviendo la raíz cuadrada de (x1 - x)2 + (y1 - y)2, tienes la distancia del cursor al centro. Link to comment
Sasu Posted April 29, 2016 Share Posted April 29, 2016 No queria revivir este post, pero ya que lo hiciste quisiera mencionar que getCursorPosition retorna las coordenadas relativas y no absoluta, un dato a tener en cuenta si usas valores absolutos. Link to comment
Enargy, Posted April 29, 2016 Author Share Posted April 29, 2016 Ya había solucionado este problema hace días, de todos modos les dejo el código que me funciono y lo dejaré por si alguien lo necesite. function isMouseInPosition(x, y, w, h) if isCursorShowing( ) then local cx, cy = getCursorPosition( ) local sx, sy = guiGetScreenSize() cx, cy = cx*sx, cy*sy return cx >= x and cx <= x+w and cy >= y and cy <= y+h end return false end function isPositionInCircle(x, y, r, cx, cy) -- creditos a del subforo ingles. local i = 0 for k=(-r), r do local q = math.sqrt((r/2)*(r/2)-k*k) if isMouseInPosition(x-q+(r/2), y+k+(r/2), 2*q, 1) then i = i+1 end end return i ~= (-r)+r end Link to comment
Recommended Posts