• Какие существуют методы по нахождению пересечения нормального вектора плоскости с точкой на другой плоскости по типовой задаче?

    hint000
    @hint000
    у админа три руки
    Как найти плоскость для которой нам и нужно найти точку
    Это называется декомпозировать задачу (декомпозиция), т.е. разбить её на части, так чтобы было более-менее понятно, как решать каждую отдельную часть.

    и плоскости, проходящей через точку пересечения плоскостей с уравнениями 5x^1 - 3x^2 <-x^3 = 0, x^1 + 2x^2 + 3x^3 = 14, x^1 + x^2 + x^3 = 16 параллельно плоскости, проходящей через три точки M1(-9; 10; 2), M2(4; 8; -1), M3(-2; 1; 3).

    1. Взять любые две из трёх пересекающихся плоскостей, определить уравнение прямой, по которой они пересекаются;
    2. Взять третью плоскость и взять прямую из предыдущего шага, найти точку их пересечения;
    3. В формате x=x0+t1*a1+t2*a2 очень легко найти уравнение плоскости, проходящей через три точки: x0 = M1, a1= M2-M1, a2=M3-M1;
    4. Из точки с шага 2 опустить нормаль на плоскость с шага 3; построить плоскость из точки с шага 2 с этим же вектором нормали - это и есть плоскость, про которую вы спрашиваете.
    Я понимаю, что мы легко можем найти нормальный вектор плоскости путем N = [a1 , a2]
    И ещё один вопрос (как любил говорить лейтенант Коломбо)... Не забыть, что N = [a1 , a2] должен быть построен из точки x0, что в сущности даёт нам не просто вектор, а уравнение прямой. И эту прямую мы в конце концов пересечём с плоскостью из шага 4 и получим точку их пересечения. Та-а-да-ам!
    Ответ написан
    3 комментария
  • Какую логику сделать для проверки верности вопроса в приложении тест?

    0xD34F
    @0xD34F Куратор тега React
    Начать следует не с какой-то там логики, а со структуры данных, что содержит вопросы. То, что есть сейчас, никуда не годится. Что, если завтра вместо трёх вариантов ответа надо будет сделать четыре? Будете добавлять ещё по два свойства в каждый объект в массиве вопросов, а в компоненте закопипастите ещё один input? А если в разных вопросах должно будет быть разное количество вариантов ответа? Что тогда?

    Варианты ответа складываете в массив, а корректный вариант обозначаете через его индекс:

    const questions = [
      {
        text: 'Выберите верное утверждение',
        answers: [
          'СССР распался в 1997 году',
          'Солнце вращается вокруг Земли',
          'шестью восемь - двадцать три',
        ],
        correctAnswer: 1,
      },
      {
        text: '...',
        answers: [ '...', '...', ... ],
        correctAnswer: ...,
      },
      ...
    ];

    В компоненте вопроса вместо того, чтобы копипастить input'ы, делаете цикл по вариантам ответа:

    function Question(props) {
      const onChange = e => props.onAnswerChange(+e.target.value);
    
      return (
        <div>
          <h3>{props.question.text}</h3>
          <ol>
            {props.question.answers.map((n, i) => (
              <li>
                <label>
                  <input
                    type="radio"
                    value={i}
                    checked={props.answer === i}
                    onChange={onChange}
                  />
                  {n}
                </label>
              </li>
            ))}
          </ol>
        </div>
      );
    }

    В родительском компоненте храните массив ответов:

    function App(props) {
      const [ answers, setAnswers ] = useState(Array(props.questions.length).fill(null));
    
      const updateAnswer = (questionIndex, answer) =>
        setAnswers(answers.map((n, i) => i === questionIndex ? answer : n));
    
      return (
        <div>
          {props.questions.map((n, i) => (
            <Question
              question={n}
              answer={answers[i]}
              onAnswerChange={answer => updateAnswer(i, answer)}
            />
          ))}
        </div>
      );
    }

    Ну и возвращаясь к вашему вопросу, чего там надо было?

    не получается сделать грамотную проверку правильного ответа...

    Чтобы проверить правильность ответа, надо сравнить его со значением свойства correctAnswer у соответствующего (с тем же индексом) вопроса. Например, считаем количество правильных ответов:

    const correctAnswersCount = answers.reduce((acc, n, i) => {
      return acc + (n === questions[i].correctAnswer);
    }, 0);

    ...и одновременно вывести верные ответы

    Поскольку свойство, обозначающее правильный ответ, является его индексом, просто достаём соответствующие элементы из массивов с вариантами ответа:

    const correctAnswers = questions.map(n => n.answers[n.correctAnswer]);

    Ну а массив строк вывести - надеюсь, справитесь сами.

    UPD. Посмотреть живьём можно здесь (есть отличия от того, что есть или предполагается у вас - вопросы показываются по очереди, а не все сразу; в результатах отображаются только верные ответы).
    Ответ написан
    1 комментарий
  • Как мне получить все объекты, падающие на зону триггера?

    @Andrei1805
    В скрипте объекта должна лежать какая то public переменная in_zone, которая по умолчанию false. Также объект надо как-то узнавать, например по тэгу, но можно придумать много других способов. Например скрипт у объекта называется object_skript. Тогда в скрипте зоны:

    List<GameObject>  objects;
    void OnTriggerEnter(Collider other)
    {
        if(other.tag == "object") //Можно выбрать любой тэг
        {
            if(!other.GetComponent<object_skript>().in_zone) // проверка не в зоне ли уже объект
            {
                other.GetComponent<object_skript>().in_zone = true; // объект попал в зону
                objects.Add(new GameObject());
                objects[objects.Count - 1] = other.gameObject; // Добавление в лист нового компонента
            }
        }
    }


    Ну и дальше там можно смотреть на objects.Count и сравнивать его с чем надо. Также если где-то будет удаление объектов из листа, то в листе будут возникать позиции с null, тогда добавление в лист лучше написать так:

    bool x = true;
    for(int i = 0; i < objects.Count;)
    {
       if(objects[i] == null)
       {
           x = false;
           objects[i] = other.gameObject;
           other.GetComponent<object_skript>().in_zone = true;
           break;
       }
       ++i;
    }
    if(x)
    {
       other.GetComponent<object_skript>().in_zone = true;
       objects.Add(new GameObject());
       objects[objects.Count - 1] = other.gameObject;
    }
    Ответ написан
    3 комментария
  • Заполнить по порядку цифры и символы с помощью стат. метода(с 1ого аргумента заканчивая 2ым аргументом). Почему в коде не раб. nums[k]=nums[k-1]++;?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Что-то какой-то ужасно страшный код у вас.
    Код вполне работает (в консоль выводится 345678 и bcdef)

    Мой вариант кода

    1. Нормально именуем сущности в коде.
    2. Убираем лишний код.
    3. Добавляем проверку входных аргументов
    using System;
    
    var intArray = CreateArrayFromIntRange(3, 8);
    var charArray = CreateArrayFromCharRange('B', 'F');
    
    Console.WriteLine(string.Join(' ', intArray));
    Console.WriteLine(string.Join(' ', charArray));
    
    static int[] CreateArrayFromIntRange(int start, int end)
    {
        if(start > end)
            throw new ArgumentException("start must be less or equal to end");
    
        var length = end - start + 1;
        var buffer = new int[length];
    
        var current = start;
        for (var i = 0; i < buffer.Length; i++)    
            buffer[i] = current++;
    
        return buffer;
    }
    
    static char[] CreateArrayFromCharRange(char start, char end)
    {
        if(start > end)
            throw new ArgumentException("start must be less or equal to end");
        
        var length = end - start + 1;
        var buffer = new char[length];
        
        var current = start;    
        for (var i = 0; i < buffer.Length; i++)    
            buffer[i] = current++;
        
        return buffer;
    }


    nums[k]=nums[k-1]++ Будет работать не так, как вы ожидаете - Индексация массивов происходит по ссылке, а не по значению. Например с List такого не будет, тк там индексатор - это метод, которы возвращает значение по индексу, а не ссылку на элемент.
    PS: Если это задание в школе/колледже/универе, то сначала разберитесь в том коде, который я написал, прежде чем его копировать
    Ответ написан
    Комментировать