Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 01.06.2018
Сообщений: 5

Нужно построить декартов лист

01.06.2018, 13:42. Показов 5900. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Написал программу для рисования декартова листа в Turbo С++. Но при построении получается линия.
Что мне нужно сделать чтобы получился декартов лист, прошу вашей помощи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
t=StrToFloat(Edit2->Text);
if (t>50 || t<-50) {
 ShowMessage("Ограничения t от -50 до 50 ") ;
} else{
a=0;
b=0;
Button1->Enabled=True;
Button4->Enabled=False;
while (a<=50) {
X=3*a*tan(t)/(1+pow(tan(t),3));
Y=3*a*pow(tan(t),2)/(1+pow(tan(t),3));
a=a+0.1;
Chart1->Series[0]->Active;
Chart1->Series[0]->AddXY(X,Y,clBlack);}
while (b<=50) {
X=3*b*tan(t)/(1+pow(tan(t),3));
Y=3*b*pow(tan(t),2)/(1+pow(tan(t),3));
b=b+15;
Chart1->Series[1]->Active;
Chart1->Series[1]->AddXY(X,Y,clBlack);}}
Миниатюры
Нужно построить декартов лист  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2018, 13:42
Ответы с готовыми решениями:

Построить декартов лист
Помогите пожалуйста!

Декартов лист
Помогите реализовать класс. Я новичок и пытаюсь разобраться :) и если кому не сложно, то напишите какие нибудь подсказки по этой задачи)

Декартов Лист.
Люди пожалуйста,очень прошу помогите!!!!вот задача: Декартов лист. X = 3*a*tg(t)/(1+tg3t); Y= 3*a*tg2t/(1+tg3t); Точка пересечения ...

11
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.06.2018, 15:25
А чего вы ждали? У вас t (и его тангенс) в цикле не меняется и все формулы для X и Y можно свести к X = a*K, где К - константа для цикла. А это линейная функция, т.е. прямая линия.
1
0 / 0 / 0
Регистрация: 01.06.2018
Сообщений: 5
01.06.2018, 16:54  [ТС]
Так спасибо)) Я правда немного ступил. Теперь получилось вот так , что мне сделать?
Миниатюры
Нужно построить декартов лист  
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,184
01.06.2018, 19:36
Судя по по формулам по которым Вы считаете уравнение Д.Л. берется в параметрической форме в полярных координатах. Т.е. t - это угол и его значения должны браться в диапазоне 0 - 2*pi.

Добавлено через 7 минут
Потом, a (и b?) это параметр и построение Д.Л. должно вестись при его постоянном значении. Иначе получится совсем другая кривая.
0
0 / 0 / 0
Регистрация: 01.06.2018
Сообщений: 5
01.06.2018, 21:48  [ТС]
Я изменил код, значение а меняет график. Мне нужно чтобы получился декартов лист.
Я читал про то что в Tchart точки сортируются по оси Х, т.е. соединяются не последовательно по созданию точки а по удаленности. Но параметр Sorted, не нашел. Может его можно отключить с помощью кода?
C++
1
2
3
4
5
6
7
8
9
10
11
12
a=StrToFloat(Edit2->Text);
if (a>50 || a<-50) {
 ShowMessage("Ограничения a от -50 до 50 ") ;} 
else{
Button1->Enabled=True;
Button4->Enabled=False;
while (t<=6.48) {
X=3*a*tan(t)/(1+pow(tan(t),3));
Y=3*a*pow(tan(t),2)/(1+pow(tan(t),3));
t=t+0.1;
Chart1->Series[0]->Active;
Chart1->Series[0]->AddXY(X,Y,clBlack);}}
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,184
01.06.2018, 22:51
1.Не видно с какого значения начинается t
2.Параметр а изменяет величину лепестка.
3.Если вы возьмете для t значения во всем диапазоне то точки X и Y разбегутся очень далеко (на бесконечность в обе стороны) и визуально на графике будет прямая. Подберите область изменения t. Самое простое - ввести границы для X и Y и при выходе за границы ничего не рисовать и переходить к следующей итерации. А граничные t записать.
0
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
01.06.2018, 23:00
Лучше нарисуй на канве без использования TChart, так будет легче
Миниатюры
Нужно построить декартов лист  
0
0 / 0 / 0
Регистрация: 01.06.2018
Сообщений: 5
02.06.2018, 01:09  [ТС]
Может на канве и легче, но показал преподу уже так. Вопрос в том что все рисуется правильно, но точки соединены не по порядку. Как это изменить я не знаю.
Для Александра:
Параметр а , я запишу как константу.
t я прописал строку, что начинается с 0.
Ограничения это рамки TChart-а.
Есть способ избавиться от этих линий как я читал якобы "сортировки" по оси Х, в длину оной, собственно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33194 / 21480 / 8231
Регистрация: 22.10.2011
Сообщений: 36,848
Записей в блоге: 11
02.06.2018, 10:29
Лучший ответ Сообщение было отмечено Virus228 как решение

Решение

Virus228, добавь перед циклом
C++
1
2
    Chart1->Series[0]->XValues->Order = loNone;
    Chart1->Series[0]->YValues->Order = loNone;
, получишь при a = 5 вот такую картинку:
Миниатюры
Нужно построить декартов лист  
1
0 / 0 / 0
Регистрация: 01.06.2018
Сообщений: 5
02.06.2018, 12:04  [ТС]
Спасибо вам всем, а то я сам не смог бы найти ошибки и исправить.
0
1 / 1 / 0
Регистрация: 09.04.2018
Сообщений: 16
12.06.2018, 10:30
Virus228, можешь выложить весь код сюда, пожалуйста? )
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,986
12.06.2018, 12:33
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
double x (double a, double fi)
{
  return 3 * a * tan(fi) / (1 + pow(tan(fi), 3));
}
//---------------------------------------------------------------------------
double y (double a, double fi)
{
  return 3 * a * tan(fi) * tan(fi) / (1 + pow(tan(fi), 3));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Refresh();
 
  Canvas->Pen->Color = clBlue;
  Canvas->MoveTo(0, ClientHeight/2);
  Canvas->LineTo(ClientWidth, ClientHeight/2);
  Canvas->MoveTo(ClientWidth/2, 0);
  Canvas->LineTo(ClientWidth/2, ClientHeight);
 
  double i, step = 0.0001, a = 5, scale = 15, r = 1, temp_x, temp_y;
  a = StrToFloatDef(Edit1->Text, a);
 
  Canvas->Pen->Color = clRed;
  for (i = 0; i < 2*M_PI; i += step)
  {
    temp_x = ClientWidth/2 + scale * x(a, i);
    temp_y = ClientHeight/2 - scale * y(a, i);
    Canvas->Ellipse(temp_x - r, temp_y - r, temp_x + r, temp_y + r);
  //    Canvas->Pixels[temp_x][temp_y] = clRed;
  }
 
  for (int i = 0; i <= ClientWidth; i++)
    if (i%7 < 4)
      Canvas->Pixels[i][i + scale * a + r] = clBlack;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2018, 12:33
Помогаю со студенческими работами здесь

Изобразить декартов лист
помогите пожалуйста с такой задачей: Кривая декартов лист определяется следующим уравнением в полярных координатах: \rho...

Декартов лист: исправить отображение
#define pi 3.1415 float x0, y0; /*Наибольшие значения, которые могут принимать абсциссы и ординаты точек, границы области...

Изобразить декартов лист на Delphi
Доброго времени, товарищи программисты. Вопрос: кто сможет сделать декартов лист на делфи:? очень прошу, помогите пож-ста :( :( чтобы...

Создать программу которая рисует Декартов лист и запустить по ней квадрат
Создайте программу, которая отображает на экране монитора график или поверхности (в соответствии с вариантом задания) в декартовой и...

Построить декартов график
Задание: Построить декартов график плоской кривой ρ=2∙a/sin(2∙φ) 0 ≤ φ ≤ 2∙π в полярной системе координат. Пересчитать в декартовы, с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru