LINUX.ORG.RU

angle() для прямой. Как?

 , , ,


0

1

Предположим, что у меня есть две точки, а между ними - прямая. Допустим, что мне нужно посчитать угол относительно, например, оси X. Как это сделать стилистически/математически верно?

Вот так:

/-------\ (pt1.x=2;pt1.y=2)
| *     | 
|  \    | 0______________>
|   \   | |  X
|    \  | |Y
|     * | v
\_______/ (pt2.x=6;pt2.y=6)

printf("%3d degrees\n", abs(angle(pt1, pt2)));

~$  45 degrees
~$

Псевдокод, питон, мат.функция, на пальцах, все что вам угодно, спасибо!

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от Artificial_Thought

Дело в том, что пока все проходили арктангенсы, я прогуливал, пил и шлялся по дворам. Зато теперь, когда они пьют от осознания этих косинусов, мне стало интересно

Если ты делаешь растеризатор...

Нет, я тренируюсь на «кошках» - просто стало интересно, как посчитать угол в зависимости от длины линии и бла-бла

minakov ★★★★★
() автор топика
Последнее исправление: minakov (всего исправлений: 1)
Ответ на: комментарий от Gorthauer

мне прямую нужно от координаты(читай: вектор до X) X замерить, а не точку от начала координат, если я правильно понял беглым взглядом

minakov ★★★★★
() автор топика

используй однородные координаты(x y 1) = а то тангенсофилы любят обрабатывать частные случае отдельными ветками.

qulinxao ★★☆
()
Ответ на: комментарий от Artificial_Thought

Да ну вас! Приходится не высыпаться и напрягать голову. А так бы привели рабочий пример, я бы с улыбкой лег спать, применил совет на деле, потом забыл, потом обдумал и запомнил, как обычно. Нет, всю систему самообразования запорют!

minakov ★★★★★
() автор топика
Ответ на: комментарий от minakov

Да ну вас!

Правильно, иди пей и шляйся по дворам.

makeB
()

иди в пятый класс за такими алгоритмами. пьюре си ему, видите ли.

nokachi
()

Псевдокод, питон, мат.функция, на пальцах, все что вам угодно, спасибо!

Извини, без питона обошёлся. Пожалуйста.

#!/usr/bin/env sh
echo '
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    size_t count;
    char const *str = "\\documentclass{article}\n"
                      "\\begin{document}\n"
                      "\\center\\Huge$\\alpha=\\arctan\\left(\\frac{y_2-y_1}{x_2-x_1}\\right)$\n"
                      "\\end{document}\n";
 
    fp = fopen("lordude.tex", "wb");
    if(fp == NULL) return EXIT_FAILURE;

    count = fwrite(str, 1, strlen(str), fp);

    return EXIT_SUCCESS;
}' > lordude.c
gcc lordude.c && ./a.out
pdflatex lordude.tex
xdg-open lordude.pdf
rm lordude* a.out

fluorite ★★★★★
()

Попробую объяснить на пальцах, при чем тут арктангенс.

Порядок действий такой:

1. Делаешь из своего отрезка вектор путем

pv(x = p2.x - p1.x, y = p2.y - p1.y);

2. Тангенс угла между осью, например, x, и твоим вектором по правилу прямоугольного треугольника:

pv.y / pv.x

3. Угол между осью и вектором:

atan(pv.y / pv.x)
Такие дела.

S-Mage ★★
()
Ответ на: комментарий от please_ignore

Спасибо, но там ничего не понятно, нашел лучше по запросу «что же такое котангенс»

minakov ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Спасибо, товарищ! Самый развернутый ответ, когда-либо полученный мной!

minakov ★★★★★
() автор топика
Ответ на: комментарий от S-Mage

Вот тебе кажется это достаточно простым и очевидным - раз, и три выражения/функции, а к ним еще прийти нужно, но со школы прошло 10 лет и помнится только что-то из природоведения. Ну да ладно, я уже понял идею, через пару недель буду щелкать ваши косинусы

minakov ★★★★★
() автор топика

Всем спасибо, впредь буду лучше гуглить, однако это(судя по количеству стыда, брошенного в меня) настолько очевидно, что плохо ищется.

minakov ★★★★★
() автор топика
Ответ на: комментарий от derlafff

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

minakov ★★★★★
() автор топика

Векторы советовали?

Y ★★
()
Ответ на: комментарий от minakov

если там для тебя ничего не понятно, у меня очень плохие новости.

please_ignore
()

Предположим, что у меня есть две точки, а между ними - прямая

подразумеваеш(судя по чертежу) точки(эти две) на этой прямой .

ибо случай */* какбе «есть две точки, а между ними прямая»

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Дело в том, что там реально две точки. Прямая - абстрактна и рисуется позже. Арктангенсы справились

minakov ★★★★★
() автор топика
Ответ на: комментарий от minakov

понятно что 80% рулит .

чисто «две точки и между ними прямая » без чертежа оказывается допускает интерпретации как

1. отрезок соединяющий(между) данные точки и прямая на которой отрезок этот лежит.

2. отрезок|лучь|прямая проходящие так что не касаясь ни первой не второй точки оказваются на пути если идти по отрезку из пункта 1. случай который можно изобразить как */* где * точки и / прямая проходящая промеж.

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

т.е одна прямая проходящая между двумя точками может буквальна быть перпендикулярна другой прямой проходящей между двумя точками ибо двухзначно выражение «проходить между»

qulinxao ★★☆
()
Ответ на: комментарий от S-Mage

лол? это такое сообщение об ошибке? т.е когда пересекает ось ординат выдаёш тангенс(ко?) ( который (-inf, inf) т.е не включая бесконечности) а когда деление на ноль ( то биш бесконечность) то 90 градусов?

и как клиент отличит случай тангенс равен 90 от случая это мы паралельную( ординате) отработали?

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Что ты несешь? Я, конечно, могу погуглить, чтобы убедиться, но я уверен, что tg(90) и tg(-90) не существует, и именно потому, что делить на 0 нельзя.

S-Mage ★★
()
Ответ на: комментарий от S-Mage

А, понял, что тебя смутило. pv.x == 0 должно быть, конечно же.

S-Mage ★★
()
Ответ на: комментарий от S-Mage

да блин

школьно расматривают прямую как функцию от x следовательно прямая x=3 ( пример) недальновидным школьником будет как особый случай расматриватся

при том что (см вику ) в общем види ур-нение произвольной прямой не обязано быть y как функция от x .

короче ты отличный пример когда люди просто не понимают чему их учат и почему.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Какой особый случай? Что ты опять несешь? Речь вообще идет об отрезке, а не о прямой, и уж тем более не о прямой, заданной в виде y = kx + b. Из отрезка делается вектор, и если угол наклона этого вектора +-90, тангенс его не существует, погугли себе график. А не существует он потому, что физический смысл тангенса - отношение противолежащего катета к прилежащему в прямоугольном треугольнике.

S-Mage ★★
()
Ответ на: комментарий от minakov

как посчитать угол в зависимости от длины линии и бла-бла

Бухай дальше, такие знания либо открываются избранным, либо никак.

Shtucer
()
Ответ на: комментарий от minakov

Когда найдёшь зависимость угла от длины, почувствуешь себя нобелевским лауреатом.

Shtucer
()
Ответ на: комментарий от qulinxao

Ну задал ты прямую в матричной форме, и что? Один черт, угол наклона будешь искать так, как я написал. Это раз.

Мы в этой теме говорим об отрезках, а не о прямых. Это два.

S-Mage ★★
()
Ответ на: комментарий от S-Mage

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

nokachi
()
Ответ на: комментарий от nokachi

в церковно приходской.

если чел не видет что вычисление коэф при х при нормализованом y как и наоборот может вынуждать обрабатывать спец случаи либо деление на ноль - ну нафига когда в общем виде если простовозвращать тройку (a,b,c) а лучше (A,B,1) - нет спец случаев .

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

тут таких челов пруд пруди. Я однажды подрабатывал репетитором и пытался научить одного программиста синусу и косинусу, но ничего не вышло. А он пишет на питоне и си-плюс-плюсе, и даже наверно тут на лоре сидит.

nokachi
()
Ответ на: комментарий от qulinxao

Задолбал. Если тебе надо найти тангенс, ты точно также будешь его искать, можешь ты это понять? Как ты будешь в общем случае возвращать угол?

S-Mage ★★
()
Ответ на: комментарий от S-Mage

Допустим, что мне нужно посчитать угол относительно, например, оси X

вот в постановке вполне очевидно топикстартеру что[ у прямой заданой уравнением y=kx+a ] всегда есть этот самый угол с осью.

короче частичное решение частично.

ты прав - твой код компилируется и выдаёт верный ответ = всё хорошо.

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.