Как нарисовать случайный треугольник и его медиану? [закрыто] -- python поле с участием turtle-graphics пол Связанный проблема

How to draw a random triangle and its median? [closed]


0
vote

проблема

русский
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»>
закрыто. Этот вопрос нуждается в Детали отладки . В настоящее время он не принимает ответы.

<Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 5.6A6.31 6.31 0 002.39 5.75C.49.39.76.93.76 1.5V.24C0 1.07.89 1.9 1.92 1.92.75C1.04 0 1.92-.83 1.92-1.9v-. 2C0-.6.26-1.15.7-1.6.26-1.15.7-1.48A6.32 6.32 0 0015 6.37ZM4.03 5.85A4.49 4.49 0 018 2.02A4.48 4,48 0 015 4.36 4.3 4,3 0 01-1.72 3.44C-01-1.74-1.5 1.9- 1.5 3.08V.1H7.2V-.14C0-1.23-.6-2.34-1.3-1.32.32-1.53-3.07A4.32.32.32 0 01-1.64-3.94ZM10 18A1 1 0 000-2х7А1 1 0 100 2H3Z ">

Хотите улучшить этот вопрос? Обновить вопрос, так что это на тему для переполнения стека.

Закрыто 4 года назад .

Улучшить этот вопрос .

Я хочу нарисовать треугольник, как это:

Введите описание изображения здесь

Я пробовал разные способы решения его, но я не сделал это правильно. Как добавить медианные линии в треугольнике? Может кто-нибудь, пожалуйста, помогите и объяснить это мне?

 <код> from turtle import * import random  def allTriMedian (w=300):     speed (0)     vertices = []     point = turtle.Point(x,y)      for i in range (3):         x = random.randint(0,300)         y = random.randint(0,300)         vertices.append(trutle.Point(x,y))         point = turtle.Point(x,y)         triangle = turtle.Polygon(vertices)      a = triangle.side()     b = triangle.side()      c = triangle.side()       m1 = tirangle.median     m2 = triangle.median     m3 = triangle.median   

Я пытался поставить уравнение напрямую

 <код> def Median (a, b, c):     m1 = sqrt((((2b^2)+(2c^2)-(a^2))))     m2 = sqrt((((2a^2)+(2c^2)-(b^2))))     m3 = sqrt((((2a^2)+(2b^2)-(c^2))))     triangle.setFill("yellow")     triangle.draw(allTriMedian)   

Или я думал найти среднюю точку и нарисовать сегмент линии для подключения вершин и средних точек.

 <код> def getMid(p1,p2):       return ( (p1[0]+p2[0]) / 2, (p1[1] + p2[1]))       mid1 = Line((point(p1[0]+p2[0]) / 2),point(x))       mid2 = Line((point(p2[1]+p3[1]) / 2),point(y))   
Английский оригинал

I want to draw a triangle like this:

enter image description here

I have tried different ways of solving it, but I have not done it correctly. How to add median lines in the triangle? Could someone please help and explain this to me?

from turtle import * import random  def allTriMedian (w=300):     speed (0)     vertices = []     point = turtle.Point(x,y)      for i in range (3):         x = random.randint(0,300)         y = random.randint(0,300)         vertices.append(trutle.Point(x,y))         point = turtle.Point(x,y)         triangle = turtle.Polygon(vertices)      a = triangle.side()     b = triangle.side()      c = triangle.side()       m1 = tirangle.median     m2 = triangle.median     m3 = triangle.median 

I tried to put the equation directly

def Median (a, b, c):     m1 = sqrt((((2b^2)+(2c^2)-(a^2))))     m2 = sqrt((((2a^2)+(2c^2)-(b^2))))     m3 = sqrt((((2a^2)+(2b^2)-(c^2))))     triangle.setFill("yellow")     triangle.draw(allTriMedian) 

Or I thought to find a midpoint and draw a line segment to connect the vertices and midpoints.

def getMid(p1,p2):       return ( (p1[0]+p2[0]) / 2, (p1[1] + p2[1]))       mid1 = Line((point(p1[0]+p2[0]) / 2),point(x))       mid2 = Line((point(p2[1]+p3[1]) / 2),point(y)) 
</div
     
   
   

Список ответов

2
 
vote

Я ненавижу делать математику. Давайте посмотрим, сможем ли мы решить это, бросая черепахами в проблему. Много черепах.

Мы случайным образом генерируем вершины треугольника. Принимая пары вершинцев в свою очередь, мы начнем черепаху на каждом направлении к другой. Когда черепахи сталкиваются (на средней точке), мы уничтожим одну черепаху и отправьте другую к вершине не в паре. После того, как мы сделали это три раза (с шестью черепахами), мы должны иметь вопрос о рисунке. Ну, в основном (без заполнения моего решения):

 <код> from turtle import Turtle, Screen from random import seed, randint  WIDTH, HEIGHT = 640, 480  def meet_in_the_middle(turtle_1, turtle_2):      position_2 = turtle_2.position()      while True:         turtle_1.setheading(turtle_1.towards(turtle_2))         turtle_1.forward(1)         position_1 = turtle_1.position()         if int(position_1[0]) == int(position_2[0]) and int(position_1[1]) == int(position_2[1]):             break          turtle_2.setheading(turtle_2.towards(turtle_1))         turtle_2.forward(1)         position_2 = turtle_2.position()         if int(position_2[0]) == int(position_1[0]) and int(position_2[1]) == int(position_1[1]):             break  seed()  screen = Screen() screen.setup(WIDTH * 1.25, HEIGHT * 1.25)  vertices = []  for _ in range(3):     x = randint(-WIDTH//2, WIDTH//2)     y = randint(-HEIGHT//2, HEIGHT//2)     vertices.append((x, y))  A, B, C = vertices  turtle_AtoB = Turtle(shape='turtle') turtle_AtoB.penup() turtle_AtoB.goto(A) turtle_AtoB.pendown()  turtle_BtoA = Turtle(shape='turtle') turtle_BtoA.penup() turtle_BtoA.goto(B) turtle_BtoA.pendown()  meet_in_the_middle(turtle_AtoB, turtle_BtoA)  turtle_BtoA.hideturtle() turtle_AtoB.setheading(turtle_AtoB.towards(C)) turtle_AtoB.goto(C) turtle_AtoB.hideturtle()   turtle_BtoC = Turtle(shape='turtle') turtle_BtoC.penup() turtle_BtoC.goto(B) turtle_BtoC.pendown()  turtle_CtoB = Turtle(shape='turtle') turtle_CtoB.penup() turtle_CtoB.goto(C) turtle_CtoB.pendown()  meet_in_the_middle(turtle_BtoC, turtle_CtoB)  turtle_CtoB.hideturtle() turtle_BtoC.setheading(turtle_BtoC.towards(A)) turtle_BtoC.goto(A) turtle_BtoC.hideturtle()   turtle_CtoA = Turtle(shape='turtle') turtle_CtoA.penup() turtle_CtoA.goto(C) turtle_CtoA.pendown()  turtle_AtoC = Turtle(shape='turtle') turtle_AtoC.penup() turtle_AtoC.goto(A) turtle_AtoC.pendown()  meet_in_the_middle(turtle_CtoA, turtle_AtoC)  turtle_AtoC.hideturtle() turtle_CtoA.setheading(turtle_CtoA.towards(B)) turtle_CtoA.goto(B) turtle_CtoA.hideturtle()  screen.exitonclick()   

черепахи на работе:

Введите описание изображения здесь

Законченный рисунок:

Введите описание изображения здесь

 

I hate doing math. Let's see if we can solve this by throwing turtles at the problem. Lots of turtles.

We'll randomly generate the verticies of the triangle. Taking pairs of verticies in turn, we'll start a turtle at each heading toward the other. When the turtles collide (at the midpoint), we'll eliminate one turtle and send the other toward the vertex not in the pair. Once we've done this three times (with six turtles), we should have the drawing in question. Well, mostly (no fill in my solution):

from turtle import Turtle, Screen from random import seed, randint  WIDTH, HEIGHT = 640, 480  def meet_in_the_middle(turtle_1, turtle_2):      position_2 = turtle_2.position()      while True:         turtle_1.setheading(turtle_1.towards(turtle_2))         turtle_1.forward(1)         position_1 = turtle_1.position()         if int(position_1[0]) == int(position_2[0]) and int(position_1[1]) == int(position_2[1]):             break          turtle_2.setheading(turtle_2.towards(turtle_1))         turtle_2.forward(1)         position_2 = turtle_2.position()         if int(position_2[0]) == int(position_1[0]) and int(position_2[1]) == int(position_1[1]):             break  seed()  screen = Screen() screen.setup(WIDTH * 1.25, HEIGHT * 1.25)  vertices = []  for _ in range(3):     x = randint(-WIDTH//2, WIDTH//2)     y = randint(-HEIGHT//2, HEIGHT//2)     vertices.append((x, y))  A, B, C = vertices  turtle_AtoB = Turtle(shape='turtle') turtle_AtoB.penup() turtle_AtoB.goto(A) turtle_AtoB.pendown()  turtle_BtoA = Turtle(shape='turtle') turtle_BtoA.penup() turtle_BtoA.goto(B) turtle_BtoA.pendown()  meet_in_the_middle(turtle_AtoB, turtle_BtoA)  turtle_BtoA.hideturtle() turtle_AtoB.setheading(turtle_AtoB.towards(C)) turtle_AtoB.goto(C) turtle_AtoB.hideturtle()   turtle_BtoC = Turtle(shape='turtle') turtle_BtoC.penup() turtle_BtoC.goto(B) turtle_BtoC.pendown()  turtle_CtoB = Turtle(shape='turtle') turtle_CtoB.penup() turtle_CtoB.goto(C) turtle_CtoB.pendown()  meet_in_the_middle(turtle_BtoC, turtle_CtoB)  turtle_CtoB.hideturtle() turtle_BtoC.setheading(turtle_BtoC.towards(A)) turtle_BtoC.goto(A) turtle_BtoC.hideturtle()   turtle_CtoA = Turtle(shape='turtle') turtle_CtoA.penup() turtle_CtoA.goto(C) turtle_CtoA.pendown()  turtle_AtoC = Turtle(shape='turtle') turtle_AtoC.penup() turtle_AtoC.goto(A) turtle_AtoC.pendown()  meet_in_the_middle(turtle_CtoA, turtle_AtoC)  turtle_AtoC.hideturtle() turtle_CtoA.setheading(turtle_CtoA.towards(B)) turtle_CtoA.goto(B) turtle_CtoA.hideturtle()  screen.exitonclick() 

Turtles at work:

enter image description here

Finished drawing:

enter image description here

</div
 
 
 
 
0
 
vote

благодаря cdlane, я взял его код и поместил некоторые функции в функции, чтобы сделать его немного более четкой (по крайней мере для меня)

 <код> # -*- coding: cp1252 -*- import turtle from turtle import Turtle, Screen from random import seed, randint  WIDTH, HEIGHT = 640, 480 def create_screen(width, height):     screen = Screen()     screen.setup(width * 1.25, height * 1.25)     return screen  def create_points(count,width = WIDTH, height = HEIGHT):     vertices = []      for _ in range(count):         x = randint(-width//2, width//2)         y = randint(-height//2, height//2)         vertices.append((x, y))     return vertices  def create_turtle_at_position(position):     turtle = Turtle(shape='turtle')     turtle.hideturtle()     turtle.penup()     turtle.goto(position)     turtle.showturtle()     turtle.pendown()     return turtle  def meet_in_the_middle(turtle_1, turtle_2):      position_2 = turtle_2.position()      while True:         turtle_1.setheading(turtle_1.towards(turtle_2))         turtle_1.forward(1)         position_1 = turtle_1.position()         if int(position_1[0]) == int(position_2[0]) and int(position_1[1]) == int(position_2[1]):             break          turtle_2.setheading(turtle_2.towards(turtle_1))         turtle_2.forward(1)         position_2 = turtle_2.position()         if int(position_2[0]) == int(position_1[0]) and int(position_2[1]) == int(position_1[1]):             break      turtle_1.hideturtle()     turtle_2.hideturtle()      return create_turtle_at_position(position_2)  def draw_median(P1st, P2nd, POpposite):     turtle_AtoB = create_turtle_at_position(P1st)     turtle_BtoA = create_turtle_at_position(P2nd)     turtle_AandBmiddle = meet_in_the_middle(turtle_AtoB, turtle_BtoA)     turtle_AandBmiddle.setheading(turtle_AandBmiddle.towards(POpposite))     turtle_AandBmiddle.goto(POpposite)     return turtle_AandBmiddle  seed()  sc = create_screen(WIDTH, HEIGHT) for _ in range(5):     sc = create_screen(WIDTH, HEIGHT)     A, B, C = create_points(3)     draw_median(A,B,C)     draw_median(B,C,A)     draw_median(C,A,B)  sc.exitonclick()   
 

thanks to cdlane, I took his code and put some functionality into functions to make it a Little clearer (at least for me)

# -*- coding: cp1252 -*- import turtle from turtle import Turtle, Screen from random import seed, randint  WIDTH, HEIGHT = 640, 480 def create_screen(width, height):     screen = Screen()     screen.setup(width * 1.25, height * 1.25)     return screen  def create_points(count,width = WIDTH, height = HEIGHT):     vertices = []      for _ in range(count):         x = randint(-width//2, width//2)         y = randint(-height//2, height//2)         vertices.append((x, y))     return vertices  def create_turtle_at_position(position):     turtle = Turtle(shape='turtle')     turtle.hideturtle()     turtle.penup()     turtle.goto(position)     turtle.showturtle()     turtle.pendown()     return turtle  def meet_in_the_middle(turtle_1, turtle_2):      position_2 = turtle_2.position()      while True:         turtle_1.setheading(turtle_1.towards(turtle_2))         turtle_1.forward(1)         position_1 = turtle_1.position()         if int(position_1[0]) == int(position_2[0]) and int(position_1[1]) == int(position_2[1]):             break          turtle_2.setheading(turtle_2.towards(turtle_1))         turtle_2.forward(1)         position_2 = turtle_2.position()         if int(position_2[0]) == int(position_1[0]) and int(position_2[1]) == int(position_1[1]):             break      turtle_1.hideturtle()     turtle_2.hideturtle()      return create_turtle_at_position(position_2)  def draw_median(P1st, P2nd, POpposite):     turtle_AtoB = create_turtle_at_position(P1st)     turtle_BtoA = create_turtle_at_position(P2nd)     turtle_AandBmiddle = meet_in_the_middle(turtle_AtoB, turtle_BtoA)     turtle_AandBmiddle.setheading(turtle_AandBmiddle.towards(POpposite))     turtle_AandBmiddle.goto(POpposite)     return turtle_AandBmiddle  seed()  sc = create_screen(WIDTH, HEIGHT) for _ in range(5):     sc = create_screen(WIDTH, HEIGHT)     A, B, C = create_points(3)     draw_median(A,B,C)     draw_median(B,C,A)     draw_median(C,A,B)  sc.exitonclick() 
</div
 
 
0
 
vote

Математическое Это самый простой способ рассчитать это по вектору. Позвольте мне сказать, что у вас есть треугольник ABC и хочу нарисовать линию от до доступа до нашей эры, поэтому ваш вектор начинается на A + AB + 1/2 BC или A + AC + 1/2 CB (Векторный)

 <код> (ax) + (bx - ax) + 0.5 (cx - bx) (ay)   (by - ay)       (cy - by)   

, что приводит к координатам для противоположной точки

 <код> x = 0.5(cx + bx) y = 0.5(cy + by)   
 

mathematical it is the easiest way to calculate this by vector. Let me say you have a triangle ABC and want to draw a line from A to the middle of BC so your vector starts at A and ends on A + AB + 1/2 BC or A + AC + 1/2 CB (vectorial)

(ax) + (bx - ax) + 0.5 (cx - bx) (ay)   (by - ay)       (cy - by) 

that results in the coordinates for the opposite Point of

x = 0.5(cx + bx) y = 0.5(cy + by) 
</div
 
 

Связанный проблема

2  Tkinter приложение самого верхнее, даже над полноэкранным экраном  ( Tkinter application topmost even over fullscreen ) 
Я использую Tkinter на Ubuntu. Я хотел бы, чтобы мое приложение было на вершине экрана, все время. Я знаю, и в настоящее время использую, <код> wm_attribute...

0  Расстояние косинуса между редкими матрицами  ( Cosine distance between sparse matrices ) 
Я пытаюсь понять, как использовать <код> csr_matrix API вместе с его <код> cosine функционал, и я работаю в <код> dimension mismatch , У меня есть следую...

3  Получение списка всех абстрактных базовых классов A Данный класс Python  ( Getting a list of all the abstract base classes a given python class implements ) 
Учитывая класс (в Python 3.8), как я могу получить список всех абстрактных базовых классов ИТ-реализацию? Например, учитывая <код> list , я ищу что-то, что ве...

1  Есть ли способ удалить подобные (численные) элементы из массива в Python  ( Is there a way to remove similar numerical elements from array in python ) 
У меня есть функция, которая производит массив как таковой: <код> [ 14 48 81 111 112 113 114 148 179 213 247 279 311 313 314 344 345 346] , что соответ...

0  Почему Python поднимает ошибку времени выполнения во время работы numpy.percentile для выравнивания Scikit-Image?  ( Why python raise a runtime error while i run numpy percentile for equalization b ) 
Я беру код выравнивания из Здесь <код> import numpy as np from skimage import morphology from skimage import color from skimage import io from matplotlib ...

-1  Ошибка Python OpenCV: (-215) Размер .Width> 0 && size.hight> 0 в функции imshow  ( Python opencv error 215 size width0 size height0 in function imshow ) 
Я запускаю эту программу, и это возвращает мне это сообщение об ошибке: Ошибка: (-215) Size.width & GT; 0 & AMP; & amp; Size.height & GT; 0 в функции imsho...

0  Питоновый способ Ифициализации булева  ( Pythonic way to initalize a boolean ) 
Это лучший / самый Pythonic способ инициализации логического значения для этой цели? <код> if start == today: b = date_time_obj <= start else: b = d...

0  Глобальное имя не работает в Python  ( Global name not working in python ) 
Я кодирую программу, где я использую Curses, чтобы создать пользовательский интерфейс, и я получил ширину и высоту терминала через другую команду, и я хочу сд...

-1  Почему мои переменные выделены синим цветом? [закрыто]  ( Why are my variables highlighted in blue ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыто. Этот вопрос не воспроизводится или был вызван опечаткам...

-3  Как публиковать данные в api api django  ( How to post data to django rest api ) 
У меня есть модель Django, которая выглядит как следующее: <код> [ { "ticker": "AAPL", "balance_sheet": [], "income_statement": ...

2  Django Allauth - без проверки электронной почты для социальных пользователей  ( Django allauth no verification email for social users ) 
Я использую Django Allauth для потребностей Auth My Webse. Когда пользователь подписывает на мой сайт с социальной учетной записью - Google в основном (у ме...

1  Прочитайте текстовый файл и интерпретируйте данные  ( Read a text file and interpret the data ) 
Я должен написать программу, которая читает в текстовом файле, называемых «TESS.TXT», а затем сортирует файл и распечатывает его со ссылкой, с которой следует...

98  Подключение к серверу Microsoft SQL с помощью Python  ( Connecting to microsoft sql server using python ) 
<Р> Я пытаюсь подключиться к SQL через питон для запуска некоторых запросов на некоторых базах данных SQL на сервере Microsoft SQL. Из моих исследований в Инте...

2  Loop Проблемы рок-бумаги Ножницы ножницы  ( Loop problems rock paper scissors game ) 
Я очень новый для программирования. Я должен написать ножницы для рок-бумаги для моего вступления в класс программирования. У меня есть отличное начало, но не...

1  Не удалось не нулевое ограничение: attussaver_post.user_id  ( Not null constraint failed statussaver post user id ) 
Я пытаюсь сохранить данные пользователя через модельфу в Django. К сожалению, я наткнулся не против NULL CONSTRAINT: Statussaver_Post.user_id. Вот моя модель....

Связанный проблема

2  Tkinter приложение самого верхнее, даже над полноэкранным экраном 
0  Расстояние косинуса между редкими матрицами 
3  Получение списка всех абстрактных базовых классов A Данный класс Python 
1  Есть ли способ удалить подобные (численные) элементы из массива в Python 
0  Почему Python поднимает ошибку времени выполнения во время работы numpy.percentile для выравнивания Scikit-Image? 
-1  Ошибка Python OpenCV: (-215) Размер .Width> 0 && size.hight> 0 в функции imshow 
0  Питоновый способ Ифициализации булева 
0  Глобальное имя не работает в Python 
-1  Почему мои переменные выделены синим цветом? [закрыто] 
-3  Как публиковать данные в api api django 
2  Django Allauth - без проверки электронной почты для социальных пользователей 
1  Прочитайте текстовый файл и интерпретируйте данные 
98  Подключение к серверу Microsoft SQL с помощью Python 
2  Loop Проблемы рок-бумаги Ножницы ножницы 
1  Не удалось не нулевое ограничение: attussaver_post.user_id