Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 7

Изолинии

21.10.2010, 19:43. Показов 3947. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Дан код на С++, необходимо переделать его в С#. В идеале, на форме должны получиться изолинии z=z(x,y); z=sin(x)*cos(y); x,y лежат в интервале [0, 2PI].
Код из книги, нерабочий, к сожалению
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
int main();
structPoint
{
int         x; 
int         у;
};
void plotIsolines (float x0, float y0, float x1, float y1,float(*f)(float,float), int n1, int n2, int nLines )
{
 
float * fVal = new float [n1*n2]; 
float hx =(x1 - x0 )/n1; 
float hy = (y1 - y0 ) / n2;
int         xStep = getmaxx()/n1; 
int         yStep = getmaxy () / n2;
moveto ( 0, 0 );
lineto((n1 -1 )*xStep,0);
lineto (( n1 -1 ) * xStep, ( n2 -1 ) * yStep );
lineto ( 0, ( n2 -1 ) * yStep );
lineto ( 0, 0 );
for(int i = 0; i<n1; i++)
 
for(int j = 0; j <n2; j++ )
fVal [i + j*n1] = f { x0 + i*hx, y0 + j*hy );
float      zMin = fVal [0]; 
float      zMax = fVal[0];
for(i = 0; i <n1 * n2;i++) if(fVa![i]<zMin)
zMin = fVal[i];
else
if(fVal[i]>zMax) zMax = fVal [i];
float      dz = ( zMax - zMin ) / nLines; 
Point     p [3];
for(i = 0;i<n1 - 1;i++ ) for(intj = 0;j<n2-1;j++) {
int        k = i+j*n1;
int        x = i * xStep;
int         y = j*yStep;
float;     t;
for (float z = zMin; z <= zMax; z += dz )
{
int      count = 0;
//edge 0 -1
if (fVal [k] != fVal [k+1])
{
t = (z - fVal [k])/(fVal [k+1] - fVal [kJ);
if (t >= 0 && t <= 1 )
{
p [count ].x = (int)( x + t * xStep );
p[count++].y = y; }
//edge1-3 
if(fVal[k+1]!=fVal{k+n1])
{                
t = (z-fVal[k+n1])/(fVal[k+13-fVal[k+n1]);
if(t>=0&&t<=1)
{
p [count ].x = (int)(x +1 * xStep );
p [count++].y = (int)(y+(1-t)*yStep); }
// edge 3-0 
if(fVal[k]!=fVal[k+n1])
{
t = (z-fVal[k+n1])/(fVal[k]-fVal[k+n1]);
if (t >= 0 && t <= 1 )
 
{
p [count ],x = x;
p [count++].y = y + (1 -t) * yStep; }
if ( count > 0 )
line(p[0].x,p[0].y,p[1].x,p[1].y);
if ( count > 2 ) // line through vertex
line(p[1].x,p[1].y,p[2].x,p[2].y);
count = 0;  
//edge1-2 
if(fVal[k+1]!=fVal[k+n1+1])
{
t = (z-fVal[k+1])/(fVal[k+n1+1]-fVal[k+1]);
if (t >= 0 && t <= 1 )
{
p [count ].x = x + xStep;
p [count++].y = y + t * yStep; }
// edge 2-3
if(fVal[k+n1]!=fVal[k+n1+1])
{
t = (z-fVal[k+n1])/(fVal[k+n1+1]-fVal[k+n1]);
if (t >= 0 && t <= 1 )
{
p [count ].x = x + t * xStep; p [count++].y = y + yStep;
}
// edge 3-1
if(fVa![k+1]!=fVal[k+n1])
{
t = (z-fVal[k+n1])/(fVal[k+1]-fVal[k+n1]);
if (t >= 0 && t <= 1 )
{
p [count ].x = (int)( x + t*xStep ); p [count++].y = (int)( y + (1 -t)*yStep );
)
if ( count > 0 )
line(p[0].x,p[0].y,p[1].x,p[1].y);
if ( count > 2 )    // line through vertex
line(p[1].x,p[1].y,p[2].x,p[2].y);
}
delete fVal; }
Сама не знаю как делать, с C# не работала ни разу. была бы очень благодарна.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2010, 19:43
Ответы с готовыми решениями:

Изолинии
Привет. Хочу построить изолинии(линии уровня) по этому мануалу http://detc.usu.ru/assets/amath0021/l3_3.htm В итоге я не понимаю почему...

Изолинии в matplotlob
В общем у меня есть данные об изменениях магнитного поля в разных точках земли. Есть 10 координат, в которых происходили замеры, и есть...

Трёхмерный график + изолинии поверхности
Доброго времени суток. Столкнулся с проблемой построения графика поверхности в полярных координатах. Внутри файлик с функцией и...

2
Заблокирован
22.10.2010, 01:09
Цитата Сообщение от Hello Kitty Посмотреть сообщение
Сама не знаю как делать, с C# не работала ни разу. была бы очень благодарна.
Ты правда считаешь, что в этом мусоре кто-то захочет разбираться?
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
22.10.2010, 16:01
Лучший ответ Сообщение было отмечено Hello Kitty как решение

Решение

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
37
38
39
40
41
42
43
44
using System;
using System.Drawing;
 
namespace WindowsFormsApplicationTest
{
    internal class GraphicsImageGenerator
    {
        public GraphicsImageGenerator()
        {
            const double minXY = 0;
            const double maxXY = Math.PI * 2;
            const double e = 0.01;
            double intervalXY = maxXY - minXY;
 
            Bitmap = new Bitmap(400, 400);
            double[] levels = { -1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1 };
 
            for (int i = 0; i < Bitmap.Width; i++)
            {
                for (int j = 0; j < Bitmap.Height; j++)
                {
                    for (int k = 0; k < levels.Length; k++)
                    {
                        double x = minXY + intervalXY * i / Bitmap.Width;
                        double y = minXY + intervalXY * j / Bitmap.Height;
                        double zn = Z(x, y);
                        if (zn >= levels[k] - e && zn <= levels[k] + e)
                        {
                            var c = (int)(255 * Math.Abs(zn - levels[k]) / e);
                            Bitmap.SetPixel(i, Bitmap.Height - j - 1, Color.FromArgb(c, c, c));
                        }
                    }
                }
            }
        }
 
        public Bitmap Bitmap { get; private set; }
 
        private static double Z(double x, double y)
        {
            return Math.Sin(x) * Math.Cos(y);
        }
    }
}
Возможный вариант решения данной задачи.
Вложения
Тип файла: zip WindowsFormsApplicationTest.zip (43.1 Кб, 215 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2010, 16:01
Помогаю со студенческими работами здесь

Построить изолинии в круговом секторе
Как построить изолинии в круге я знаю, делаю вот так: ContourPlot, {x, -R, R}, {y, -R, R}, RegionFunction -&gt; Function, Contours -&gt;...

Как сделать изолинии поверхности разных типов?
Можно ли редактировать x и y- изолинии на поверхности (каркас) редактировать по отдельности, а не целиком? Т.е. сделать например x-изолинию...

Построить изолинии поля, сoзданного четырьмя равноименными и равными по величине зарядами
Всем доброго времени суток! В общем то вот сама формулировка задачи по программированию: Пoстpoить изолинии поля, сoЗДaннoГo ...

Используя изолинии показать, как возрастут расходы, если изменить значения х0 и у0
Здравствуйте. Имеется матрица x, матрица y, матрица расходов С. По задаче нашел центральные координаты х0 и у0. Требуется при...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru