У рок 3.9
|
|
|
|
|
Задание:
Даны координаты точек двух векторов АВ и СD, А: (0,0), В: (10,20), С: (10,0), D: (-5,10)
Найдите скалярное произведение векторов. Выясните направление векторов относительно друг друга Найдите длину векторов АВ и СD Найдите разность и сумму векторов АВ и СD Найдите векторное произведение векторов АВ и СD по координатам точек и по координатам векторов. Решите задачу для стражника, если угол обзора равен 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('попадает на продолжение') Задание
Точку С соединили с точкой D(0,0). Какой из отрезков образует больший угол с осью Ох, АВ или СD? Проверить принадлежность точки Е(-4,-0,5) к отрезку АВ Из точки С опустили перпендикуляр на отрезок АВ, выяснить попадает ли перпендикуляр на этот отрезок?
|
У рок 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))
| Задание
Решите задачу выше для рисунка(см. далее)
|
|