Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Настройка оси

Delphi , Синтаксис , Математика



Автор: Lookin
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Настройка сетки графика по оси ординат. Имеет смысл при передаче данных в
другие пакеты, использующие графическое представление данных (например, в Excel).

Зависимости: uses Chart, TeEngine, Math;
Автор:       lookin
Copyright:   lookin
Дата:        25 декабря 2002 г.
***************************************************** }

//для использования в Delphi

procedure CalcAxis(NChart: TChart);
var
  step, ymx, ymn, rmx, rmn, raz: double;
  i, n, m, d: integer;
begin
  with NChart do
  begin
    ymx := -10000000000;
    ymn := 10000000000;
    m := 0;
    n := 0;
    for i := 0 to SeriesCount - 1 do
      if Series[i].XValues.Count <> 0 then
      begin
        if Series[i].YValues.MaxValue > ymx then
          ymx := Series[i].YValues.MaxValue;
        if Series[i].YValues.MinValue < ymn then
          ymn := Series[i].YValues.MinValue;
      end;
    rmx := ymx;
    rmn := ymn;
    while ymn < 0 do
    begin
      ymn := ymn + 100;
      ymx := ymx + 100;
      Inc(m);
    end;
    raz := ymx - ymn;
    while raz < 100 do
    begin
      ymn := ymn * 10;
      ymx := ymx * 10;
      raz := ymx - ymn;
      Inc(n);
    end;
    ymx := Ceil(ymx);
    ymn := Floor(ymn);
    d := trunc(ymx) div 100;
    ymx := (d + 1) * 100;
    d := trunc(ymn) div 100;
    ymn := d * 100;
    raz := ymx - ymn;
    step := raz / 5;
    ymx := ymx / (Power(10, n)) - m * 100;
    ymn := ymn / (Power(10, n)) - m * 100;
    step := step / (Power(10, n));
    d := 0;
    for i := 1 to 5 do
      if (d = 0) and (ymn + step * i > rmx) then
        d := i;
    if d <> 0 then
      ymx := ymn + step * d;
    d := 0;
    for i := 1 to 5 do
      if (d = 0) and (ymn + step * i < rmn) then
        d := i;
    if d <> 0 then
      ymn := ymn + step * d;
    with LeftAxis do
    begin
      Automatic := false;
      Increment := step;
      Minimum := -100000000000;
      Maximum := ymx;
      Minimum := ymn;
    end;
  end;
end;
//для использования в Excel в качестве макроса (Visual Basic)
Function SetAxisRange(CChart As Chart, ByRef AMax As Double, 
ByRef AMin As Double, ByRef AStep As Double)

Dim Step, RMax, RMin, Max, Min, Raz As Double
Dim I, J, N, M, d As Integer
    
    Max = -1000000
    Min = 1000000
    For I = 1 To CChart.SeriesCollection.Count
    ReDim VArray(UBound(CChart.SeriesCollection(I).Values))
    VArray = CChart.SeriesCollection(I).Values
    For J = 1 To UBound(VArray)
    If VArray(J) > Max Then Max = VArray(J)
    If VArray(J) < Min Then Min = VArray(J)
    Next J
    Next I
    RMax = Max
    RMin = Min
    N = 0
    M = 0
    If Max <> Min Then
    While Min < 0
    Min = Min + 100
    Max = Max + 100
    M = M + 1
    Wend
    Raz = Max - Min
    While Raz < 100
    Min = Min * 10
    Max = Max * 10
    Raz = Max - Min
    N = N + 1
    Wend
    Max = Int(Max) + 1
    Min = Int(Min)
    d = Max \ 100
    Max = (d + 1) * 100
    d = Min \ 100
    Min = d * 100
    Raz = Max - Min
    Step = Raz / 5
    AStep = Step / (10 ^ N)
    AMin = Min / (10 ^ N) - M * 100
    AMax = Max / (10 ^ N) - M * 100
    d = 0
    For I = 1 To 5
    If d = 0 Then
    If (AMin + AStep * I) > RMax Then d = I
    End If
    Next I
    If d <> 0 Then AMax = AMin + AStep * d
    d = 0
    For I = 1 To 5
    If d = 0 Then
    If (AMin + AStep * I) < RMin Then d = I
    End If
    Next I
    If d <> 0 Then AMin = AMin + AStep * d
    End If
    
End Function

Пример использования:

CalcAxis(Form1.Chart1);

Привет! Я переведу текст на русский язык.

Процедура Delphi CalcAxis

Эта процедура принимает объект TChart в качестве входного параметра и устанавливает свойства левого оси этого графика на основе максимальных и минимальных значений всех серий, отображенных на этом графике. Вот шаг за шагом, что она делает:

  1. Она проходит по всем сериям в графике и находит максимальные и минимальные значения Y.
  2. Если минимальное значение отрицательное, она увеличивает это значение на 100, пока оно не станет положительным, чтобы ось начала с разумного значения (например, не -10^15).
  3. Если диапазон значений (макс-мин) меньше 100, она умножает оба максимальное и минимальное значения на 10, пока диапазон не станет больше или равен 100.
  4. Она рассчитывает шаг для оси, разделив диапазон на 5 и затем умножив на степень 10 в зависимости от количества раз, когда диапазон был умножен в шагах 2-3.
  5. Она устанавливает свойства левой оси, включая автоматический режим с отключенным, шаг, минимальное и максимальное значения.

Функция Visual Basic SetAxisRange

Эта функция принимает объект Chart и три параметра ByRef: AMax (максимальное значение), AMin (минимальное значение) и AStep (шаг). Вот шаг за шагом, что она делает:

  1. Она проходит по всем сериям в графике и находит максимальные и минимальные значения Y.
  2. Если минимальное значение отрицательное, она увеличивает это значение на 100, пока оно не станет положительным, чтобы ось начала с разумного значения (например, не -10^15).
  3. Если диапазон значений (макс-мин) меньше 100, она умножает оба максимальное и минимальное значения на 10, пока диапазон не станет больше или равен 100.
  4. Она рассчитывает шаг для оси, разделив диапазон на 5 и затем умножив на степень 10 в зависимости от количества раз, когда диапазон был умножен в шагах 2-3.
  5. Она устанавливает максимальное, минимальное и шаговые значения для левой оси.

Пример использования

Чтобы использовать эту процедуру или функцию, вы бы вызвали ее с объектом графика как аргументом, например:

CalcAxis(Form1.Chart1);

или

SetAxisRange(Chart1, AMax, AMin, AStep)

Это устанавливает диапазон оси для указанного графика на основе максимальных и минимальных значений его серий.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Математика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:02:21/0.025415897369385/1