Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Поставить точку на графике, и определить ниже она линии или нет  (Прочитано 4784 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн obgorelyi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Кстати ниже или не ниже, она не определяет (честно скажу лень мучиться), программа просто ставит точки на двух картинках.
Вместе с кодом для понятности придется еще и картинки сюда закинуть.
from PIL import Image, ImageDraw
import sys

# Входные параметры:
# Nem - эффективная частота вращения
# Me - эффективный крутящий момент
# Nemax - максимальная частота вращения
# Memax - максимальный крутящий момент
# nN - номинальная частота вращения
# engine - маркировка двигателя
def draw_points(Nem,Me,Nemax,Memax,nN,engine):
  tmp = float(nN)
  nN = tmp
  CFM71 = ["CFM71S","CFM71M","CFM71L"]
  CFM90 = ["CFM90S","CFM90M","CFM90L"]
  CFM112 = ["CFM112S","CFM112M","CFM112L"]
  CFM112H = ["CFM112H"]
  DFS56 = ["DFS56S","DFS56M","DFS56L"]
  if engine==CFM71:
    im_max = "CM71_max"
    xymax = [754,148]
    im_nom = "CM71_nom"
    xynom = [751,151]
   
    inNMax = [0,nN]
    inMMax = [0,35.0]
    inNNom = [0,6000.0]
    inMNom = [0,16.0]
  elif engine==CFM90:
    im_max = "CM90_max"
    xymax = [764,148]
    im_nom = "CM90_nom"
    xynom = [750,144]
   
    inNMax = [0,nN]
    inMMax = [0,80.0]
    inNNom = [0,6000.0]
    inMNom = [0,35.0]
  elif engine==CFM112:
    im_max = "CM112_max"
    xymax = [754,123]
    im_nom = "CM112SL_nom"
    xynom = [733,76]
   
    inNMax = [0,nN]
    inMMax = [0,250.0]
    inNNom = [0,4500.0]
    inMNom = [0,70.0]
  elif engine==CFM112H:
    im_max = "CM112_max"
    xymax = [754,123]
    im_nom = "CM112H_nom"
    xynom = [688,157]
   
    inNMax = [0,nN]
    inMMax = [0,250.0]
    inNNom = [0,4500.0]
    inMNom = [0,160.0]
  else: # engine==DFS56
    im_max = "DS56_max"
    xymax = [741,155]
    im_nom = "DS56_nom"
    xynom = [733,160]
   
    inNMax = [0,nN]
    inMMax = [0,16.0]
    inNNom = [0,6000.0]
    inMNom = [0,4.5]
 
  # Открываем картинки
  image_Max = Image.open(im_max+".ppm")
  image_Nom = Image.open(im_nom+".ppm")
 
  # Определим цену деления
 
  priceMMax=(inMMax[1]-inMMax[0])/(500-xymax[1])
  priceNMax=(inNMax[1]-inNMax[0])/(xymax[0]-100)
  print("priceMMax = "+str(priceMMax))
  print("priceNMax = "+str(priceNMax))
 
  priceMNom=(inMNom[1]-inMNom[0])/(500-xynom[1])
  priceNNom=(inNNom[1]-inNNom[0])/(xynom[0]-100)
  print("priceMNom = "+str(priceMNom))
  print("priceNMax = "+str(priceNMax))
 
  # Определим координаты точек
  ymax=(-Memax)/priceMMax+500
  xmax=Nemax/priceNMax+100
 
  ymax = int(round(ymax))
 
  xmax = int(round(xmax))
 
 
  ynom=(-Me)/priceMNom+500
  xnom=Nem/priceNNom+100
 
  ynom = int(round(ynom))
  xnom = int(round(xnom))
 
  # Рисуем точки
 
  # Жирность точки
  B = 5
  # Цвет точки
  color=0
 
  drawmax = ImageDraw.Draw(image_Max)
  drawnom = ImageDraw.Draw(image_Nom)
 
  for x in range(xmax-B,xmax+B):
    for y in range(ymax-B,ymax+B):
      drawmax.point((x,y),fill=color)
 
  for x in range(xnom-B,xnom+B):
    for y in range(ynom-B,ynom+B):
      drawnom.point((x,y),fill=color)
 
  del drawmax
  del drawnom
 
  image_Max.save("engine_1_max.eps")
  image_Nom.save("engine_1_nom.eps")
  print("Изображения сохранены!")

К сожалению, как выяснилось зона графика не везде одинаковая, поэтому верхняя правая точка графика, указана в скрипте (это там где куча условий). Также для определения цены деления, записаны диапазоны (на каждой картинке свой диапазон моментов и частот, тоже в кипе условий). Сильно не пинать, если код корявый, я только учусь (на автоматизации процессов решения курсовых) :).
Ну а результат работы модуля в купе с основным скриптом (или как это правильно назвать), представлен на PDF.
Возможно позже добавлю функцию, которая определяет ниже точка линии или нет, хотя честно скажу сомневаюсь, что я этим займусь (стимула нету, курсовые сдам и усё).

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Ясно, спасибо =)
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн obgorelyi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Еще забыл сказать, что левая нижняя точка, на всех картинках имеет одинаковую координату (100,500).
По этому в программе когда указывается 100 или 500 имеется ввиду нижний левый угол.

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.