Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Equally spaced circle in UI
-
@AZOM, GridView has a
pack_x
argument:g = GridView( count_x=1, pack_x=GridView.START)
Using
END
instead would move them to the right edge.You can also control the placement down to the pixel by providing an additional
gap
argument, which in this case is essentially the distance to the edge.See the end of this page for the documentation.
-
@mikael
Yeah, thanks for all. -
@adomanim, here you go. You need the
vector.py
from here.import ui import vector chars = 'ABCDEFGH' start_angle = 0 # First character on the right circle_color = 'red' char_color = 'white' char_font = ('Apple SD Gothic Neo', 32) diameter = min(ui.get_screen_size())/2 root = ui.View() root.present() pointer = vector.Vector() pointer.magnitude = diameter/2 pointer.degrees = start_angle for c in chars: label = ui.Label( text=c, text_color=char_color, alignment=ui.ALIGN_CENTER, font=char_font) label.center = root.bounds.center() + tuple(pointer) pointer.degrees += 360/len(chars) root.add_subview(label) class CircleView(ui.View): def layout(self): self.corner_radius = self.width/2 circle = CircleView( width=diameter, height=diameter, border_width=1, border_color=circle_color, center = root.bounds.center() ) root.add_subview(circle) circle.send_to_back()
-
This is for my friend: can someone make a 3 points generator on the circumference of a circle that has a diameter of 2 units. And with these three x, y coordinates, look if the point (0,5:0) is in the triangle made with the three points?
-
@AZOM, sounds like a school exercise. Wouldn’t it be more useful for your friend to spend the time on cracking it?
-
No, we are in high school, and this is not a homework or something like that, he just like maths and wants help to “verify” his answer to a question he gets somewhere on the web.
-
The only thing I am doing wrong is with rounding up numbers (I think it is my only problem) beau a se if 2 values that I compare are like at 0,000001 appart, they are not equal. Also, I am using cos and sin to try to find the three points. And my friend doesn’t program btw.
-
@AZOM, try
0.1 + 0.2 == 0.3
If you are not satisfied with the result, you might try to use the Decimal class, where you can also
getcontext().prec == 6
-
@AZOM, meanwhile, for your problem, I would use
ui.Path
with the three points, thenhit_test
with the given point. I do not know whether this would be any more accurate than the method you are using, though. -
Right, now, I don’t have my program, but I’m going to send it at ~5h pm.
-
@AZOM, going to get my beauty sleep now, but here’s what I meant by the hit test:
import random import ui import vector random_angle = lambda: random.random() * 360 p = ui.Path() point = vector.Vector(0, 1) point.degrees = random_angle() p.move_to(*point) print(point) for _ in range(2): point.degrees = random_angle() p.line_to(*point) print(point) p.close() print('IN' if p.hit_test(0.5,0) else 'OUT')
-
So, are you trying to input 3 points (not all colinear) and find the circle (radius and x,y). Then want to determine if a fourth point is on the edge of the circle?
A simple method is to just subtract the center, then compute the length, then compare to the circle radius. But, as you found, you want to use abs(point_to_center_dist-circle_radius)< threshold, where you'll have to decide what is an acceptable threshold.