0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|||||||
1 | |||||||
Определить координаты вершины треугольника12.12.2010, 14:36. Показов 6648. Ответов 34
Метки нет (Все метки)
Здравствуйте, снова обращаюсь к вам за помощью.
Прошу помочь в таком задании, искал вроде ничего похожего не нашел.
0
|
12.12.2010, 14:36 | |
Ответы с готовыми решениями:
34
Вершины треугольника имеют координаты Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины Определить координаты четвёртой вершины прямоугольника Определить координаты четвертой вершины прямоугольника |
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
24.12.2010, 19:06 | 21 | |||||
Вышеприведенная программа от BrumbleHorse работает неверно, например при вводе
0, 1 1, 0 7, 5 Вот так будет правильнее:
1
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
||||||
24.12.2010, 21:34 | 22 | |||||
Не знаю, как Вы рассуждали, но это известная задача, и ее ответ Smin = 0.5*NOD(a,b), где NOD - наибольший общий делитель.
Добавлено через 25 минут
И дальше у тебя цикл идет как y(x), но когда By>Bx надо бежать как x(y) - смотри алгоритм Брезенхейма, короче.
1
|
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
|
|
24.12.2010, 21:37 | 23 |
У меня там и есть один алгоритм.. постараюсь донести то, что я хотел сказать:
если взять любой треугольник, заданный целочисленными координатами, его площадь не может быть менее 0,5.. Извиняюсь я не то имел ввиду.. я имел ввиду,что когда точка Б лежит на прямой у=х... Действительно, когда вводится точка Б с одной из координат равной нулю,то моя программа работает неверно.. а вот по Б(7,5) у меня вопрос: ваша программа при Б(7,5) выдает точку С(0,1) и площадь соответственно будет 3,5.. но если взять например другую точку С (-25,-18), то с ней площадь составит 0,5, что меньше, чем 3,5.. Добавлено через 1 минуту Никогда раньше не встречал такую задачу .. Спасибо буду знать..
0
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
|
24.12.2010, 22:46 | 24 |
Только не надо по этому поводу ковыряться в алгоритме для нормального, "наклонного" отрезка AB, пытаясь сделать его универсальным - этот примитивный случай надо тупо выделять и выписывать примитивное решения для него особо (модуль ненулевой координаты пополам).
Егойная программа у меня на (7,5) выдает (3,2), что правильно.
1
|
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
|
|
24.12.2010, 23:11 | 25 |
Да, его программа выдает 3,2 на 7,5 - скомпилировал ее компилятором Visual Studio.. до этого я ее скомпилировал GNU GCC, почему-то не было русского шрифта и выдавала на все ответ 0,1..
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
24.12.2010, 23:14 | 26 |
Значения
Cx = 1; Cy = 0; будут возвращены в случае, если цикл не выполнится ни разу, т.е. когда вершина B лежит на оси y. При выполнении хотя бы одной итерации цикла эти значения затираются. А вот по какой координате устраивать цикл, - это по-моему все равно, так как все отсекаемые от клеток треугольники подобны друг другу, и точка, ближайшая к прямой по x, будет к ней ближайшей и по y. В общем, читайте внимательнее. Но если приведете пример неправильной работы моей программы, то буду признателен за конструктивную критику.
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
25.12.2010, 00:27 [ТС] | 27 |
Что-то я совсем запутался. Какая из программ правильная ?
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
25.12.2010, 05:08 | 28 |
при любой точке B координаты точки C будут одними из:
С(0; 1) || С(1; 0) || С(-1; 0) || С(0; -1) знак определяется по координатам точки B а площадь берётся наименьшая из двух бывает несколько точек C ещё, которые дают одинаковые площади B(5; 0), C(0; 1) B(5; 0), C(0; -1) B(5; 0), C(1; 1) B(5; 0), C(1; -1) ... или B(1; 0), C(0; 1) B(1; 0), C(0; -1) B(1; 0), C(1; 1) B(1; 0), C(1; -1)
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
25.12.2010, 10:36 | 29 | |||||
Ну, ежели для вас программа, для которой приведены примеры неправильной работы, может считаться правильной, то вы неизбежно запутаетесь.
А какие у вас сомнения относительно правильности моей программы, мне просто интересно? Добавлено через 1 час 48 минут Эта тема какой-то чемпион по количеству ложных утверждений. Если рассматривать вершины B и C как векторы, то площадь треугольника равна половине площади построенного на них параллелограмма, т.е. S = 0.5 * abs(Bx*Cy – By*Cx), т.е. задача состоит в поиске минимальной по модулю ненулевой линейной комбинации чисел Bx и By, которая, согласно известной теореме, равна по модулю НОД(Bx, By), а минимальная площадь треугольника, соответственно, Smin = 0.5 * НОД(Bx, By), как уже здесь писали выше. Если числа Bx и By взаимно простые, то НОД(Bx, By) = 1, и Smin = 0.5 (один из выступавших посчитал, что это верно для всех случаев). Если же Bx делит By, то НОД(Bx, By) = |Bx|, и площадь равна Smin = 0.5 * |Bx|, и в этом случае решением будет Cx = 0, Cy = 1. Если же By делит Bx, то, соответственно, Cx = 1, Cy = 0, т.е. вы приняли за общий случай другую крайность (только еще со знаками там заморочились, которые, на самом деле, ни на что не влияют). Ну а истина лежит посередине, т.е. в моей программе. Добавлено через 3 часа 22 минуты Вот так покрасивше будет:
0
|
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
|
|
25.12.2010, 11:37 | 30 |
Разобрался - я так поверхностно глянул, подумал, что ты апроксимацию отрезка делать будешь, а у тебя все гораздо вульгарнее, но эффективо. А такой инициализацией ты борешься с вертикальными линиями. На целые числа это переделать бы как нибудь...
А аргумент цикла от наклона менять возможно таки стоит, но в отличие от Брезенхайма бежать надо по координате, которая меняется меньше - тупо сферически быстрее так будет, практически же также. Да, действительно так. Добавлено через 1 минуту Даже я лоханулся слегка
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
26.12.2010, 10:27 | 31 |
Не по теме: стер тут кое-что про наибольший общий делитель
Сообщение от Mr.X
Сообщение от Mr.X
и не только с ними Добавлено через 2 минуты Код
[guest@localhost tests]$ ./t Введите координаты вершины B: Bx = -5 By = -5 При заданных вершинах треугольника A(0, 0) и B(-5, -5) треугольник будет иметь минимально возможную площадь при вершине в точке C(0, 1). [guest@localhost tests]$
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
26.12.2010, 20:55 [ТС] | 32 |
Очень прошу добавить комментарии по каждой строке в этой части кода.
Не очень понятно, что происходит А тема забавная получилась, столько людей отписалось. Спасибо большое всем.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
27.12.2010, 01:59 | 33 |
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
27.12.2010, 02:11 [ТС] | 34 |
Более простой код видел и вроде понял, хотелось-б более сложный понять
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
27.12.2010, 04:38 | 35 | |||||
Сообщение от accept
и вот пример
Код
[guest@localhost tests]$ ./t input B(x, y): -5,-6 minimal area = 2.5, C(0; 1) [guest@localhost tests]$ ./t input B(x, y): -6, -5 minimal area = 2.5, C(1; 0) [guest@localhost tests]$ естественно там больше точек C и они не только еденицу могут содержать например B(-5; -5), C(-3; -2)
0
|
27.12.2010, 04:38 | |
27.12.2010, 04:38 | |
Помогаю со студенческими работами здесь
35
Определить координаты вершин прямоугольного треугольника Известны координаты вершин треугольника, определить его площадь Заданы координаты трех точек. Определить периметр треугольника, вершинами которого являются заданные точк Даны координаты вершин треугольника и координаты некоторой точки внутри него Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |