Главная страница
Навигация по странице:

  • У рок 3.9

  • У рок 3.10 Площадь фигур

  • У рок 3.11 Задание

  • Решить задачу

  • У рок 3.16

  • У рок 3.17

  • практикумы по языку Питон. Питон. Практикум Загидуллин Наиль Рашитович мбоу сош 2 Оглавление Введение в Питон 4 Команда вывода 4


    Скачать 7.93 Mb.
    НазваниеПрактикум Загидуллин Наиль Рашитович мбоу сош 2 Оглавление Введение в Питон 4 Команда вывода 4
    Анкорпрактикумы по языку Питон
    Дата07.11.2022
    Размер7.93 Mb.
    Формат файлаdocx
    Имя файлаПитон.docx
    ТипПрактикум
    #774704
    страница9 из 11
    1   2   3   4   5   6   7   8   9   10   11





    4.Решение геометрических задач на питоне





    У рок 3.9











    Задание:

    Даны координаты точек двух векторов АВ и СD, А: (0,0), В: (10,20), С: (10,0), D: (-5,10)

    1. Найдите скалярное произведение векторов. Выясните направление векторов относительно друг друга

    2. Найдите длину векторов АВ и СD

    3. Найдите разность и сумму векторов АВ и СD

    4. Найдите векторное произведение векторов АВ и СD по координатам точек и по координатам векторов.

    5. Решите задачу для стражника, если угол обзора равен 210 градусов, а позиция разведчика имеет координаты вектора (1,2):


    У рок 3.10 Площадь фигур

    Вводится 6 чисел – координаты трёх вершин треугольника. Необходимо найти его площадь.

    Входные данные:

    Шесть чисел – координаты трёх вершин треугольника.

    Выходные данные:

    Одно число – величина площади треугольника.

    Примеры

    входные данные:

    1 1 2 4 3 2

    выходные данные:

    2.50000
    Задачу можно решить по формуле Герона

    import math

    x1, y1, x2, y2, x3, y3 = list(map(int, input().split()))

    a = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)

    b = math.sqrt((x3 - x1) ** 2 + (y3 - y1) ** 2)

    c = math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2)

    p = (a + b + c) / 2

    res = math.sqrt(p * (p - a) * (p - b) * (p - c))

    print(res)
    Но лучше это сделать с помощью векторного(косого) произведения

    xa, ya, xb, yb, xc, yc = 1,1,2,4,3,2

    s = abs((xb - xa) * (yc - ya) - (xc - xa) * (yb - ya)) / 2

    print('%.2f' % s)



    Задание

    Напишите программу для нахождения площади фигур, используя векторное произведение








    У
    рок 3.11


    Задание

    Напишите программу для определения принадлежности точки к треугольнику, используя векторное произведение









    У рок 3.12

    Задание

    Напишите программу для определения площади фигуры, используя векторное произведение









    У рок 3.13
    xa, ya, xb, yb, xc, yc, xd, yd, xe, ye = 1,3,4,4,4,3,7,1,3,2

    def cross(x1,y1,x2,y2,x3,y3):

    return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)

    if cross(xa,ya,xb,yb,xc,yc) < 0 and \

    cross(xb,yb,xc,yc,xd,yd) < 0 and \

    cross(xc,yc,xd,yd,xe,ye) < 0 and \

    cross(xd,yd,xe,ye,xa,ya) < 0 :

    print('y')

    else:

    print('n')
    Решить задачу:

    N точек на плоскости заданы своими координатами. Найти такой минимальный по площади выпуклый многоугольник, что все N точек лежат либо внутри этого многоугольника, либо на его границе (такой выпуклый многоугольник называется выпуклой оболочкой).




    У
    рок 3.14
    xa, ya, xb, yb, xc, yc, xd, yd = 1,1,3,3,1,3,4,1

    def cross(x1,y1,x2,y2,x3,y3):

    return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)

    if (cross(xa,ya,xb,yb,xc,yc) >= 0 and \

    cross(xa,ya,xb,yb,xd,yd) <=0 ) and \

    (cross(xd,yd,xb,yb,xc,yc) >= 0 and \

    cross(xd,yd,xa,ya,xc,yc) <=0):

    print('y' )

    else:

    print('n' )
    Решить задачу:

    На плоскости заданы n отрезков координатами концевых точек. Концы отрезков задаются двумя парами координат (x1[i],y1[i]), (x2[i],y2[i]), 1<=i<=n (концы принадлежат отрезку). Необходимо найти прямую, имеющую общие точки с максимальным числом отрезков, и напечатать в порядке возрастания номера тех отрезков, которые эта прямая пересекает

    Подсказка

    Мы должны рассмотреть прямые, проходящие через все возможные комбинации пар концевых точек отрезков. Всего надо проверить (2*N-1)+(2*N-2)+...+1=N*(2*N-1) линий и для каждой из них найти число пересечений с отрезками. Та прямая, у которой это число максимальное, и есть искомая. При решении возникает подзадача: определить, пересекается ли прямая ax+b=y и отрезок с концами (x1,y1), (x2,y2).
    Урок 3.15



    import math

    xa, ya, xb, yb = 1,3,4,1

    xp, yp = 1,5

    def cross(x1,y1,x2,y2,x3,y3):

    return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)

    def LenV(x1,y1,x2,y2):

    return math.sqrt((x2 - x1) **2 + (y2 - y1)**2)

    AB = LenV(xa,ya,xb,yb)

    S = abs(cross(xa,ya,xb,yb,xp,yp))

    h = S / AB

    print('%.2f' % h )
    Задание (см. далее)

    Найдите с помощью программы расстояние от точек С и D до прямой АВ



    У
    рок 3.16

    import math

    xa, ya, xb, yb = 1,3,4,1

    xp, yp = 6,1

    def cross(x1,y1,x2,y2,x3,y3):

    return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)

    def LenV(x1,y1,x2,y2):

    return math.sqrt((x2 - x1) **2 + (y2 - y1)**2)

    def drop(x1,x2,x3,y1,y2,y3):

    return (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)

    # print(drop(xb,xa,xp,yb,ya,yp))

    if drop(xa,xb,xp,ya,yb,yp)>=0 and drop(xb,xa,xp,yb,yb,yp)>=0:

    AB = LenV(xa,ya,xb,yb)

    S = abs(cross(xa,ya,xb,yb,xp,yp))

    h = S / AB

    print('%.2f' % h )

    elif drop(xa,xb,xp,ya,yb,yp) < 0:

    PA = LenV(xa,ya,xp,yp)

    print('%.2f' % PA )

    else:

    PB = LenV(xb,yb,xp,yp)

    print('%.2f' % PB )
    Задание

    Найдите расстояние от точки А до отрезка ВС





    У рок 3.17



    Задание

    Найдите расстояние между точками и угол между векторами (см. далее)



    У
    рок 3.18
    import numpy

    M1 = numpy.array([[2., 5.], [1., -10.]]) # Матрица (левая часть системы)

    v1 = numpy.array([1., 3.]) # Вектор (правая часть системы)

    print(numpy.linalg.solve(M1, v1))
    Решите системы уравнений, используя модуль numpy



    У
    рок 3.20
    n = 10000

    m1 = 0

    m2 = 2

    dz = (m2-m1)/n

    s = 0

    y = 0

    for i in range(n):

    y += dz

    s += dz*y**2

    print(s)


    Задание

    Найдите площадь фигуры, ограниченного двумя кривыми(см. далее)



    Урок 3.21

    1 На плоскости заданы две точки A(x1,y1) и B(x2,y2). Определить, какой из отрезков - OA или OB образует больший угол с осью OX

    import math

    x1,y1,x2,y2 = 1,1,1,2

    OA = math.atan2(y1,x1)

    OB = math.atan2(y2,x2)

    print('OA' if abs(OA) > abs(OB) else 'OB')

    Второй способ:

    print('OA' if x1*y2-x2*y1< 0 else 'OB')
    2 Принадлежит ли точка A отрезку ВС?

    import math

    x1,y1,x2,y2 = 0,0,1,2

    xc,yc = .5,1

    def cross(x1,y1,x2,y2,x3,y3):

    return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)

    if cross(x1,y1,x2,y2,xc,yc) == 0 and xc >= x1 and xc <= x2:

    print('y')

    else:

    print('n')

    3 Отрезок на плоскости задается двумя не совпадающими концевыми точками X(x1,x2) и Y(y1,y2). Из точки С(xc,yc) к прямой, содержащей отрезок [X,Y], проводится перпендикуляр P. Определить, попадает ли перпендикуляр P на отрезок [X,Y] или на его продолжение

    x1,y1,x2,y2 = 1,1,2,2

    xc,yc = 2,1

    def drop(x1,x2,x3,y1,y2,y3):

    return (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)

    if drop(x2,x1,xc,y2,y1,yc) <= 0 or drop(x1,x2,xc,y1,y2,yc) <= 0 :

    print('не попадает')

    else:

    print('попадает на продолжение')
    Задание

    1. Точку С соединили с точкой D(0,0). Какой из отрезков образует больший угол с осью Ох, АВ или СD?

    2. Проверить принадлежность точки Е(-4,-0,5) к отрезку АВ

    3. Из точки С опустили перпендикуляр на отрезок АВ, выяснить попадает ли перпендикуляр на этот отрезок?




    У
    рок 3.22
    Задание

    Определите взаимное расположение точек С,D,E относительно прямой АВ



    У
    рок 3.23
    import math

    min = 1000000

    z = -10

    d = 0.2

    n = int(abs(z)/d)

    x1,y1,x2,y2 = -1,0,-2,3

    def LenV(x1,y1,x2,y2):

    return math.sqrt((x2 - x1) **2 + (y2 - y1)**2)

    for i in range(2*n):

    z += d

    s = LenV(x1,y1,0,z)+LenV(x2,y2,0,z)

    if s < min:

    min = s

    k = z

    print(round(k,2),round(s,2))


    Задание

    Решите задачу выше для рисунка(см. далее)




    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта