Timon55 0 / -1 / 0 Регистрация: 25.07.2017 Сообщений: 10 |
||||
1 |
||||
По трём вершинам прямоугольника определить четвёртую28.08.2017, 05:14. Показов 3520. Ответов 3 Метки нет (Все метки)
Есть программа,которая по заданным координатам трёх вершин определяет координаты четвертой. Я не могу понять как она работает, ну то есть сам алгоритм нахождения координат четвертой вершины. Подскажите кому не трудно. Заранее благодарен. Листинг:
-0.50 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
28.08.2017, 05:14 |
Ответы с готовыми решениями:
По трем вершинам прямоугольника найти координаты четвертой 4. По известным…
Прокомментируйте код, находящий 4-ю вершину прямоугольника по трём заданным 3 |
3638 / 2970 / 918 Регистрация: 05.07.2013 Сообщений: 14,220 |
|
28.08.2017, 08:23 |
2 |
на бумажке нарисуй три точки, построй из каждой точки вектора к двум другим, для одной из точек угол между векторами будет равен 90, значит это стороны прямоугольника, осталось найти их сумму.
0 |
164 / 170 / 139 Регистрация: 28.11.2016 Сообщений: 301 |
|
28.08.2017, 09:03 |
3 |
Решение Условие (x3-x2)*(x2-x1)+(y3-y2)*(y2-y1) = 0 это условие перпендикулярности векторов. Миниатюры
1 |
0 / -1 / 0 Регистрация: 25.07.2017 Сообщений: 10 |
|
28.08.2017, 09:15 [ТС] |
4 |
Xoraxax, спасибо за помощь Добавлено через 2 минуты
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
28.08.2017, 09:15 |
Помогаю со студенческими работами здесь
По заданным вершинам определить фигуру
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given an N * M grid. It contains exactly three ‘*’ and every other cell is a ‘.’ where ‘*’ denotes a vertex of a rectangle. The task is to find the coordinates of the fourth (missing) vertex (1-based indexing).
Examples:
Input: grid[][] = {“*.*”, “*..”, “…”}
Output: 2 3
(1, 1), (1, 3) and (2, 1) are the given coordinates of the rectangle where (2, 3) is the missing coordinate.
Input: grid[][] = {“*.*”, “..*”}
Output: 2 1
Approach: Find the coordinates of the 3 vertices by iterating through the given grid. Since a rectangle consists of 2 X-coordinates and 2 Y-coordinates and 4 vertices, every X-coordinate and Y-coordinate should occur exactly twice. We can count how many times each X and Y coordinate occurs in the 3 given vertices and the 4th one will have coordinates that occur only once.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using
namespace
std;
pair<
int
,
int
> findFourthVertex(
int
n,
int
m, string s[])
{
unordered_map<
int
,
int
> row, col;
for
(
int
i = 0; i < n; i++)
for
(
int
j = 0; j < m; j++)
if
(s[i][j] ==
'*'
) {
row[i]++;
col[j]++;
}
int
x, y;
for
(
auto
tm
: row)
if
(
tm
.second == 1)
x =
tm
.first;
for
(
auto
tm
: col)
if
(
tm
.second == 1)
y =
tm
.first;
return
make_pair(x + 1, y + 1);
}
int
main()
{
string s[] = {
"*.*"
,
"*.."
,
"..."
};
int
n =
sizeof
(s) /
sizeof
(s[0]);
int
m = s[0].length();
auto
rs = findFourthVertex(n, m, s);
cout << rs.first <<
" "
<< rs.second;
}
Java
import
java.util.HashMap;
import
java.util.Map;
class
GfG
{
static
Pair<Integer, Integer> findFourthVertex(
int
n,
int
m, String s[])
{
HashMap<Integer, Integer> row =
new
HashMap<>();
HashMap<Integer, Integer> col =
new
HashMap<>();
for
(
int
i =
0
; i < n; i++)
{
for
(
int
j =
0
; j < m; j++)
{
if
(s[i].charAt(j) ==
'*'
)
{
if
(row.containsKey(i))
{
row.put(i, row.get(i) +
1
);
}
else
{
row.put(i,
1
);
}
if
(col.containsKey(j))
{
col.put(j, col.get(j) +
1
);
}
else
{
col.put(j,
1
);
}
}
}
}
int
x =
0
, y =
0
;
for
(Map.Entry<Integer, Integer> entry : row.entrySet())
{
if
(entry.getValue() ==
1
)
x = entry.getKey();
}
for
(Map.Entry<Integer, Integer> entry : col.entrySet())
{
if
(entry.getValue() ==
1
)
y = entry.getKey();
}
Pair<Integer, Integer> ans =
new
Pair<>(x +
1
, y +
1
);
return
ans;
}
public
static
void
main(String []args)
{
String s[] = {
"*.*"
,
"*.."
,
"..."
};
int
n = s.length;
int
m = s[
0
].length();
Pair<Integer, Integer> rs = findFourthVertex(n, m, s);
System.out.println(rs.first +
" "
+ rs.second);
}
}
class
Pair<A, B>
{
A first;
B second;
public
Pair(A first, B second)
{
this
.first = first;
this
.second = second;
}
}
Python3
def
findFourthVertex(n, m, s) :
row
=
dict
.fromkeys(
range
(n),
0
)
col
=
dict
.fromkeys(
range
(m),
0
)
for
i
in
range
(n) :
for
j
in
range
(m) :
if
(s[i][j]
=
=
'*'
) :
row[i]
+
=
1
;
col[j]
+
=
1
;
for
keys,values
in
row.items() :
if
(values
=
=
1
) :
x
=
keys;
for
keys,values
in
col.items() :
if
(values
=
=
1
) :
y
=
keys;
return
(x
+
1
, y
+
1
) ;
if
__name__
=
=
"__main__"
:
s
=
[
"*.*"
,
"*.."
,
"..."
]
n
=
len
(s);
m
=
len
(s[
0
]);
rs
=
findFourthVertex(n, m, s);
print
(rs[
0
], rs[
1
])
C#
using
System;
using
System.Collections.Generic;
class
GfG
{
static
Pair<
int
,
int
> findFourthVertex(
int
n,
int
m, String []s)
{
Dictionary<
int
,
int
> row =
new
Dictionary<
int
,
int
>();
Dictionary<
int
,
int
> col =
new
Dictionary<
int
,
int
>();
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < m; j++)
{
if
(s[i][j] ==
'*'
)
{
if
(row.ContainsKey(i))
{
row[i] = row[i] + 1;
}
else
{
row.Add(i, 1);
}
if
(col.ContainsKey(j))
{
col[j] = col[j] + 1;
}
else
{
col.Add(j, 1);
}
}
}
}
int
x = 0, y = 0;
foreach
(KeyValuePair<
int
,
int
> entry
in
row)
{
if
(entry.Value == 1)
x = entry.Key;
}
foreach
(KeyValuePair<
int
,
int
> entry
in
col)
{
if
(entry.Value == 1)
y = entry.Key;
}
Pair<
int
,
int
> ans =
new
Pair<
int
,
int
>(x + 1, y + 1);
return
ans;
}
public
static
void
Main(String []args)
{
String []s = {
"*.*"
,
"*.."
,
"..."
};
int
n = s.Length;
int
m = s[0].Length;
Pair<
int
,
int
> rs = findFourthVertex(n, m, s);
Console.WriteLine(rs.first +
" "
+ rs.second);
}
}
class
Pair<A, B>
{
public
A first;
public
B second;
public
Pair(A first, B second)
{
this
.first = first;
this
.second = second;
}
}
Javascript
<script>
function
findFourthVertex(n, m, s)
{
var
row =
new
Map(), col =
new
Map();
for
(
var
i = 0; i < n; i++)
for
(
var
j = 0; j < m; j++)
if
(s[i][j] ==
'*'
) {
if
(row.has(i))
row.set(i, row.get(i)+1)
else
row.set(i, 1)
if
(col.has(j))
col.set(j, col.get(j)+1)
else
col.set(j, 1)
}
var
x, y;
row.forEach((value, key) => {
if
(value == 1)
x = key;
});
col.forEach((value, key) => {
if
(value == 1)
y = key;
});
return
[x + 1, y + 1];
}
var
s = [
"*.*"
,
"*.."
,
"..."
];
var
n = s.length;
var
m = s[0].length;
var
rs = findFourthVertex(n, m, s);
document.write( rs[0] +
" "
+ rs[1]);
</script>
Time Complexity: O(N*M), as we are using a loop to traverse N*M times.
Auxiliary Space: O(N + M), as we are using extra space for map.
Last Updated :
31 May, 2022
Like Article
Save Article
Vote for difficulty
Current difficulty :
Basic
Главная
-
- 0
-
Даны три вершины А(1,4,2), В(2.-1,5), С(0,-2,4) прямоугольника АВСД. Найдите координаты четвертой вершины Д
Антонина Сбитенькова
Вопрос задан 22 сентября 2019 в
5 — 9 классы,
Геометрия.
-
Комментариев (0)
Добавить
Отмена
1 Ответ (-а, -ов)
- По голосам
- По дате
-
- 0
-
О — середина диагонали АС
О = 1/2(А+С) = 1/2*((1,4,2)+(0,-2,4)) = 1/2*(1;2;6) = (1/2;1;3)
И эта же точка — середина диагонали BD
O = 1/2*(B + D)
2O = B + D
D = 2O — B = 2*(1/2;1;3) — (2;-1;5) = (1;2;6) — (2;-1;5) = (-1;3;1)
Отмена
Надежда Селяненкова
Отвечено 22 сентября 2019
-
Комментариев (0)
Добавить
Отмена
Ваш ответ
Program If23; Var x1,y1,x2,y2,x3,y3,x4,y4:integer; Begin ReadLn(x1,y1,x2,y2,x3,y3); If x1 = x2 Then x4 := x3; If x1 = x3 Then x4 := x2; If x2 = x3 Then x4 := x1; If y1 = y2 Then y4 := y3; If y1 = y3 Then y4 := y2; If y2 = y3 Then y4 := y1; WriteLn('Координаты четвертой вершины: ',x4,',',y4); End.
Похожие записи/страницы:
- Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям…
- Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь, используя формулу…
- Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям…
- найти площадь выпуклого четырёхугольника по координатам его вершин А(x1,y1) B(x2,y2) C (x3,y3) D(x4,y4) -…
- Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая верхняя вершина…
- Написать программу, определяющую наименьшую площадь из трех заданных координатами своих вершин квадратов. Написать…
- Заданы координаты трех вершин треугольника (x1,y1), (x2,y2),(x3,y3). Найти его периметр и площадь — Pascal(Паскаль)
- На плоскости заданы координаты трёх точек — вершины треугольника. Определить, равносторонним, равнобедренным или…
koo236
7 лет назад
Светило науки — 1 ответ — 0 раз оказано помощи
Сначала находим координаты вектора АВ, получится (0,6 ; -3,5). Следовательно вектор АВ должен быть равен вектору DC, значит и координаты у них будут совпадать (0,6 ; -3,5). Пишем формулу нахождения вектора DC. Координата вершины D (-0,6 ; 1,1), потому что из координат C нужно вычесть координаты D, чтобы получились координаты вектора DC.
(0 оценок)