1 Востаннє редагувалося roctik1996 (12.05.2014 19:37:51)

Тема: Провести дотичну

Потрібно провести дотичну до графіка sin(x)
вот так я малюю графік sin(x)

for(x=-50;x<=50;x++)
{y=sin(x/10);
Series1->AddXY(x,y,"",clRed);}

рівняння дотичної має такий вигляд (ну математичний запис): у = f(x0)+f'(x0)∙(х–х0).
Хто знає як це зробити допоможіть, мені зранку програму потрібно здати а залишилась тільки ця одна кнопка
я щось пробував робити але зовсім не те получається
вот що я робив (тільки не сваріть  :)  )

for(b=0;b<=5;b++)
{y2=sin(x1)+cos(x1)*(b-x1);
Series3->Add(x1,y2);}

2 Востаннє редагувалося 0x9111A (12.05.2014 19:50:00)

Re: Провести дотичну

а що виходить?
може проблема в виборі х1?

+
ви малюєте графік не sin(x) a sin(x/10)
це треба враховувати

Подякували: koala1

3 Востаннє редагувалося roctik1996 (12.05.2014 19:55:14)

Re: Провести дотичну

0x9111A написав:

а що виходить?
може проблема в виборі х1?

та ні )))
1)воно бере значення -50 по осі ОУ а повинно по осі ОХ
2)рухається прямою лінією а повинно синусоїдою(рух дотичної я вже передбачу потрібно спочатку її намалювати :) )
3) враховував я той факт але все залишається майже без змін

4

Re: Провести дотичну

roctik1996 написав:

рухається прямою лінією а повинно синусоїдою(рух дотичної я вже передбачу потрібно спочатку її намалювати :)

Дотична, пане, то пряма
яке х1 берете, якщо не секрет?
похідну перерахували?

5

Re: Провести дотичну

0x9111A написав:

пане, то пряма
яке х1 берете, якщо не секрет?
похідну перерахували?

ну вот щоб воно ''рухалось'' я прописав в Timer такий код (це для того щоб можна побачити де дотична торкається графіка,загалом вийшов такий код):

if(x1<50)
{x1++;
y1=sin(x1/10);
Series2->Clear();
Series3->Clear();
Series2->AddXY(x1,y1,"",clGreen);}

for(b=0;b<=5;b++)
{y2=sin(x1/10)+cos(x1/10)*(b-(x1/10));
Series3->Add(x1,y2);} 

там ще коли я малюю основний графік задаю значення х1=-50(-50 тому що інакше тільки деяку частину малює і не все видно)

6 Востаннє редагувалося 0x9111A (12.05.2014 20:11:45)

Re: Провести дотичну

y2=sin(x1/10)+cos(x1/10)*(b-(x1/10))

похідна все таки не найкраще порахована
мало б бути

y2=sin(x1/10)+cos(x1/10)/10*(b-x1)

Вдумайтесь що ви робите - графік по х починаєте малювати з -50 з кроком 1, а похідну по х з 0 до 5 з кроком 1, в моїй уяві то виглядає не дуже гарно
P.S. Може я чогось не розумію, але мені здається що тут ніц не рухається

7

Re: Провести дотичну

ну вот я тому і написав на цей форум що в мене нічого не виходить хоча спроби є
думав допоможе хтось
вот вся моя програма залежить від цих 3-х рядочків коду дотичної
але всерівно чому в мене по осях навпаки то рухається
ну хоча б прямою траекторією рухалось але по осі ОХ а воно по ОУ(((

8

Re: Провести дотичну

Прошу модераторів зробити зауваження пану roctik1996 - він створює вже третю гілку на одну тему, при тому, що йому прямо було вказано на неприпустимість такої поведінки.

9

Re: Провести дотичну

koala написав:

Прошу модераторів зробити зауваження пану roctik1996 - він створює вже третю гілку на одну тему, при тому, що йому прямо було вказано на неприпустимість такої поведінки.

вибачте звичайно але я незнаю як видаляти теми + на минулі ніхто невідповідав((
тому зробив іншу і покроково хочу вирішити свою задачу

10 Востаннє редагувалося 0x9111A (12.05.2014 21:00:47)

Re: Провести дотичну

що у вас "рухається"?
чесно кажучи, взагалі дивно що є рух, бо воно начебто мало просто все перемальовуватись кожен раз при виклику процедури таймеру
або я, знову ж таки, чогось не розумію

пропоную таку ідею:
малюєте всю синусоїду

for(int x=-50; x<=50 ;x++) 
{
    y = sin(x/10);
    Series1->AddXY(x, y, "", clRed);
}

а потім дотичні з певною затримкою, щось типу

for (int x1 = -45; x1 < 45; x1+=5) //цикл по точках синусоїди з кроком 5, до яких малюємо дотичні
{
    Series3->Clear();
    for (int x = -50; x < 50; x++) //малюємо дотичну до точки х1
    {
        int y = sin(x1/10)+cos(x1/10)/10*(x-x1);
        Series3->Add(x, y);
    }
    //затримка
}

З реалізацією затримки я надіюсь ви якось згуглите справитесь

11

Re: Провести дотичну

0x9111A написав:

що у вас "рухається"?
чесно кажучи, взагалі дивно що є рух, бо воно начебто мало просто все перемальовуватись кожен раз при виклику процедури таймеру
або я, знову ж таки, чогось не розумію

да воно перемальовується)))
а вот повинно рухатись так як ви скидали мені перше ссилку на вікіпедію(дотична)
вот там є гіфка на якій зображено рух дотичної по кривій
мені так само потрібно зробити

12

Re: Провести дотичну

roctik1996 написав:
koala написав:

Прошу модераторів зробити зауваження пану roctik1996 - він створює вже третю гілку на одну тему, при тому, що йому прямо було вказано на неприпустимість такої поведінки.

вибачте звичайно але я незнаю як видаляти теми + на минулі ніхто невідповідав((
тому зробив іншу і покроково хочу вирішити свою задачу

по-перше, звичайні користувачі не мають таких прав як видалення тем - це можуть зробити лише модератори
по-друге, n-шт. однакових тем не допоможуть у вирішенні задачі. якщо немає відповіді на поставлене вами питання, то проблема не в темі, а в поставленому питанні (а саме в його формулюванні)
по-третє, ця тема залишається, дві інші переношу в кошик

13

Re: Провести дотичну

Cyan написав:

по-третє, ця тема залишається, дві інші переношу в кошик

згоден