CCCPaste

useModeling

import { useEffect } from 'react'
import { useSelector } from 'react-redux'
import {
  selectIsModeling,
  selectObjectModelm,
  selectObjectModelR,
} from 'selectors'

export const useModeling = () => {
  const isModeling = useSelector(selectIsModeling)

  const m = useSelector(selectObjectModelm)
  const r = useSelector(selectObjectModelR)

  const g = 9.8
  const V0 = 0
  const t = 0.1

  const n = 0.0182
  const C = 0.4
  const S = Math.PI * r * r
  const p = 1.89

  const k1 = 6 * Math.PI * r * n
  const k2 = (C * S * p) / 2

  useEffect(() => {
    console.log('modeling')
    if (!isModeling) return

    let i = 100
    let Vi = V0

    const calculateVi = function () {
      console.log(123)
      if (!isModeling || --i === 0) return

      const CC = (m * g - k1 * Vi - k2 * Vi * Vi) / m
      const DD = Vi + t * CC
      const c = (m * g - k1 * CC - k2 * DD * DD) / m

      console.log(Vi)
      Vi = Vi + (t / 2) * (CC + c)

      calculateVi()
    }

    calculateVi()
  }, [isModeling])
}