Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение графика в полярных координатах 
:(
    Опции темы
oal
  Дата 26.5.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.5.2005

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как можно реализовать построение графика в полярных координатах в элементе PICTURE, если задан массив комплексных данных A(+-a+-bi) или значения амплитуды |A| и значения угла arctg(im(A)/re(A)

Спасибо.
PM MAIL   Вверх
ChofCh
Дата 26.5.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 27.4.2005
Где: г. Долгопрудный

Репутация: нет
Всего: 2



Пускай x0, y0 - координаты центра с.к. (системы координат) графика в с.к. PictureBox'a. Тогда
x=x0+Re
y=y0-Im
если график задан в комплексных координатах.
x=x0+R*Cos(fi)
y=y0-R*Sin(fi)
если график задан в полярных координатах.
Для выведения точки в PictureBox'e используется метод
.PSet (x,y),color

PS. А вот использовать для получения угла arctg недостаточно, т.к. arctg(fi+pi)=arctg(fi), т.е. однозначно определить угол без анализа знаков координат не удастся.
PM MAIL ICQ   Вверх
oal
Дата 27.5.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.5.2005

Репутация: нет
Всего: нет



Выполнил следующий код
Код

    Dim X() As Complex
    Dim x0 As Single, y0 As Single, R As Single, FI As Single
    Dim xi(1) As Single, yi(1) As Single
    Dim I As Long
    
    X = OpenDataToComplex("tf.dat")
    Me.Show
    On Error Resume Next
    With Pic
        x0 = .ScaleWidth / 2
        y0 = .ScaleHeight / 2
        For I = 1 To UBound(X)
            R = C.Rho(X(I))
            FI = C.Arg(X(I))
            xi(1) = x0 + R * Cos(FI) * 1000
            yi(1) = y0 - R * Sin(FI) * 1000
            Pic.PSet (xi(1), yi(1)), vbBlue
            Pic.Line -(xi(0), yi(0)), vbBlue
            xi(0) = xi(1)
            yi(0) = yi(1)
        Next I
    End With

но получил беспорядочное расположение линий.
Мне нужно, чтобы график был похож на годограф Найквиста

Что мне нужно изменить???
PM MAIL   Вверх
ChofCh
Дата 27.5.2005, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 27.4.2005
Где: г. Долгопрудный

Репутация: нет
Всего: 2



А код OpenDataToComplex можешь показать? Заодно с кодом класса C.
PM MAIL ICQ   Вверх
Gannibal
Дата 27.5.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: 18
Всего: 17



почитай.. может поможет smile http://vingrad.ru/VB-VB-002858


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
oal
Дата 28.5.2005, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.5.2005

Репутация: нет
Всего: нет



Функция OpenDataToComplex осуществляет ввод файла комплексных данных A+Bi в программу

Код

Public Function OpenDataToComplex(ByVal FileName As String) As Variant
Dim Fnum As Integer
Dim iCount As Long, lLen As Long
Dim lString As String
Dim byBuffer() As Complex

    iCount = 0
    Fnum = FreeFile
    Open FileName For Input Access Read Lock Write As #Fnum
    Do While Not EOF(1)
        iCount = iCount + 1
        Line Input #Fnum, lString
        Do While InStr("0123456789.+- ", Left$(lString, 1)) = 0
            lString = Mid$(lString, 2, Len(lString) - 1)
        Loop
        ReDim Preserve byBuffer(1 To iCount) As Complex
        lLen = InStr(lString, ";")
        byBuffer(iCount).RE = CDbl(Val(Left$(lString, lLen)))
        byBuffer(iCount).IM = CDbl(Val(Right$(lString, Len(lString) - lLen)))
    Loop
    Close #Fnum
    OpenDataToComplex = byBuffer
End Function


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

Public Type Complex
    Re As Double
    Im As Double
End Type

Public Function Cmplx(ByVal Real As Double, ByVal Imag As Double) As Complex
    Cmplx.Re = Real
    Cmplx.Im = Imag
End Function

Public Function Polar(ByVal Rho As Double, ByVal Arg As Double) As Complex
    Polar.Re = Rho * Cos(Arg)
    Polar.Im = Rho * Sin(Arg)
End Function

Public Property Get Rho(ByRef X As Complex) As Double
    If X.Im = 0 Then
        Rho = Abs(X.Re)
    ElseIf Abs(X.Re) < Abs(X.Im) Then
        Rho = Abs(X.Im) * Sqr(1 + Square(X.Re / X.Im))
    Else
        Rho = Abs(X.Re) * Sqr(1 + Square(X.Im / X.Re))
    End If
End Property

Public Property Get Arg(ByRef X As Complex) As Double
Dim A As Double, piDiv2 As Double

    piDiv2 = 2 * Atn(1)   'pi/2
    Select Case X.Re
        Case Is > 0
            If (X.Im = 0) Then
                A = 0
            Else
                A = Atn(X.Im / X.Re)
            End If
        Case 0
            Select Case X.Im
                Case Is > 0: A = piDiv2
                Case 0:      A = 0
                Case Is < 0: A = -piDiv2
            End Select
        Case Is < 0
            Select Case X.Im
                Case Is > 0: A = Atn(X.Im / X.Re) + 2 * piDiv2
                Case 0:      A = 2 * piDiv2
                Case Is < 0: A = Atn(X.Im / X.Re) - 2 * piDiv2
            End Select
    End Select
    Arg = A
End Property


Файл данных tf.dat предсталяет собой частотную передаточную функцию двух сигналов: отношение взаимного спектра к автоспектру входного сигнала. Мне нужно его представить в виде частотного годографа Найквиста.

Как это получить?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1109 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.